From 5f18717d16a37c7c42d5a28b11f167ea24745c94 Mon Sep 17 00:00:00 2001
From: Nikita Pettik <korablev@tarantool.org>
Date: Sat, 29 Dec 2018 03:30:11 +0200
Subject: [PATCH] sql: fix decoding data of type BOOLEAN

Closes #3906
---
 src/box/sql/vdbeaux.c         |  2 +-
 test/sql-tap/autoinc.test.lua |  2 +-
 test/sql/types.result         | 28 ++++++++++++++++++++++++++++
 test/sql/types.test.lua       | 11 +++++++++++
 4 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/src/box/sql/vdbeaux.c b/src/box/sql/vdbeaux.c
index fc805e3aa3..76bddf2ce1 100644
--- a/src/box/sql/vdbeaux.c
+++ b/src/box/sql/vdbeaux.c
@@ -3780,7 +3780,7 @@ sqlite3VdbeMsgpackGet(const unsigned char *buf,	/* Buffer to deserialize from */
 	case MP_BOOL:{
 			assert((unsigned char)*zParse == 0xc2
 			       || (unsigned char)*zParse == 0xc3);
-			pMem->u.i = (unsigned)*zParse - 0xc2;	/* bool -> Integer {0,1} */
+			pMem->u.i = (unsigned char)*zParse - 0xc2;
 			pMem->flags = MEM_Int;
 			break;
 		}
diff --git a/test/sql-tap/autoinc.test.lua b/test/sql-tap/autoinc.test.lua
index 3ac9a856a4..3becc342a1 100755
--- a/test/sql-tap/autoinc.test.lua
+++ b/test/sql-tap/autoinc.test.lua
@@ -43,7 +43,7 @@ test:do_execsql_test(
         SELECT * FROM "_sequence";
     ]], {
         -- <autoinc-1.3>
-        1,1,"T1",1,0,9223372036854775807LL,1,0,4294967041
+        1,1,"T1",1,0,9223372036854775807LL,1,0,0
         -- </autoinc-1.3>
     })
 
diff --git a/test/sql/types.result b/test/sql/types.result
index 1daeb7a8ca..1ac599ad5d 100644
--- a/test/sql/types.result
+++ b/test/sql/types.result
@@ -104,3 +104,31 @@ box.sql.execute("DROP VIEW v1;")
 box.sql.execute("DROP TABLE t1;")
 ---
 ...
+-- gh-3906: data of type BOOL is displayed as should
+-- during SQL SELECT.
+--
+format = {{ name = 'ID', type = 'unsigned' }, { name = 'A', type = 'boolean' }}
+---
+...
+sp = box.schema.space.create("TEST", { format = format } )
+---
+...
+i = sp:create_index('primary', {parts = {1, 'unsigned' }})
+---
+...
+sp:insert({1, true})
+---
+- [1, true]
+...
+sp:insert({2, false})
+---
+- [2, false]
+...
+box.sql.execute("SELECT * FROM test")
+---
+- - [1, 1]
+  - [2, 0]
+...
+sp:drop()
+---
+...
diff --git a/test/sql/types.test.lua b/test/sql/types.test.lua
index 5f6b4dc49e..8eda361598 100644
--- a/test/sql/types.test.lua
+++ b/test/sql/types.test.lua
@@ -29,3 +29,14 @@ box.space.T1.index.I4.parts
 
 box.sql.execute("DROP VIEW v1;")
 box.sql.execute("DROP TABLE t1;")
+
+-- gh-3906: data of type BOOL is displayed as should
+-- during SQL SELECT.
+--
+format = {{ name = 'ID', type = 'unsigned' }, { name = 'A', type = 'boolean' }}
+sp = box.schema.space.create("TEST", { format = format } )
+i = sp:create_index('primary', {parts = {1, 'unsigned' }})
+sp:insert({1, true})
+sp:insert({2, false})
+box.sql.execute("SELECT * FROM test")
+sp:drop()
-- 
GitLab