From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng3.m.smailru.net (smtpng3.m.smailru.net [94.100.177.149]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 0DEF94696C3 for ; Wed, 27 Nov 2019 15:15:56 +0300 (MSK) From: Nikita Pettik Date: Wed, 27 Nov 2019 15:15:44 +0300 Message-Id: <3ab4973b2ba51caca2e6c211a66a5f6fdf6faff7.1574846892.git.korablev@tarantool.org> In-Reply-To: References: MIME-Version: 1.0 In-Reply-To: References: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH 4/6] sql: extend result set with nullability List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: tarantool-patches@dev.tarantool.org Cc: v.shpilevoy@tarantool.org If member of result set is (solely) column identifier, then metadata will contain its corresponding field nullability as boolean property. Note that indicating nullability for other expressions (like x + 1) may make sense but it requires derived nullability calculation which in turn seems to be overkill (at least in scope of current patch). Part of #4407 --- src/box/execute.c | 18 +- src/box/iproto_constants.h | 1 + src/box/lua/execute.c | 5 + src/box/lua/net_box.c | 7 +- src/box/sql/select.c | 6 +- src/box/sql/sqlInt.h | 3 + src/box/sql/vdbe.h | 3 + src/box/sql/vdbeInt.h | 5 + src/box/sql/vdbeapi.c | 7 + src/box/sql/vdbeaux.c | 7 + test/box/sql-update-with-nested-select.result | 5 +- test/sql/boolean.result | 425 ++++++++++++++--------- test/sql/check-clear-ephemeral.result | 5 +- test/sql/collation.result | 74 ++-- test/sql/gh-3199-no-mem-leaks.result | 120 ++++--- test/sql/gh2141-delete-trigger-drop-table.result | 20 +- test/sql/gh2251-multiple-update.result | 10 +- test/sql/iproto.result | 105 +++--- test/sql/misc.result | 25 +- test/sql/on-conflict.result | 20 +- test/sql/persistency.result | 190 ++++++---- test/sql/row-count.result | 25 +- test/sql/sql-debug.result | 15 +- test/sql/transition.result | 190 ++++++---- test/sql/types.result | 105 +++--- test/sql/update-with-nested-select.result | 5 +- 26 files changed, 862 insertions(+), 539 deletions(-) diff --git a/src/box/execute.c b/src/box/execute.c index 20bfd0957..98812ae1e 100644 --- a/src/box/execute.c +++ b/src/box/execute.c @@ -267,8 +267,10 @@ error: region_truncate(region, svp); return -1; } + static size_t -metadata_map_sizeof(const char *name, const char *type, const char *coll) +metadata_map_sizeof(const char *name, const char *type, const char *coll, + int nullable) { uint32_t members_count = 2; size_t map_size = 0; @@ -277,6 +279,11 @@ metadata_map_sizeof(const char *name, const char *type, const char *coll) map_size += mp_sizeof_uint(IPROTO_FIELD_COLL); map_size += mp_sizeof_str(strlen(coll)); } + if (nullable != -1) { + members_count++; + map_size += mp_sizeof_uint(IPROTO_FIELD_NULLABLE); + map_size += mp_sizeof_bool(nullable); + } map_size += mp_sizeof_uint(IPROTO_FIELD_NAME); map_size += mp_sizeof_uint(IPROTO_FIELD_TYPE); map_size += mp_sizeof_str(strlen(name)); @@ -311,6 +318,7 @@ sql_get_metadata(struct sql_stmt *stmt, struct obuf *out, int column_count) const char *coll = sql_column_coll(stmt, i); const char *name = sql_column_name(stmt, i); const char *type = sql_column_datatype(stmt, i); + int nullable = sql_column_is_nullable(stmt, i); /* * Can not fail, since all column names and types * are preallocated during prepare phase and the @@ -318,13 +326,13 @@ sql_get_metadata(struct sql_stmt *stmt, struct obuf *out, int column_count) */ assert(name != NULL); assert(type != NULL); - size = metadata_map_sizeof(name, type, coll); + size = metadata_map_sizeof(name, type, coll, nullable); char *pos = (char *) obuf_alloc(out, size); if (pos == NULL) { diag_set(OutOfMemory, size, "obuf_alloc", "pos"); return -1; } - uint32_t map_sz = 2 + (coll != NULL); + uint32_t map_sz = 2 + (coll != NULL) + (nullable != -1); pos = mp_encode_map(pos, map_sz); pos = mp_encode_uint(pos, IPROTO_FIELD_NAME); pos = mp_encode_str(pos, name, strlen(name)); @@ -334,6 +342,10 @@ sql_get_metadata(struct sql_stmt *stmt, struct obuf *out, int column_count) pos = mp_encode_uint(pos, IPROTO_FIELD_COLL); pos = mp_encode_str(pos, coll, strlen(coll)); } + if (nullable != -1) { + pos = mp_encode_uint(pos, IPROTO_FIELD_NULLABLE); + pos = mp_encode_bool(pos, nullable); + } } return 0; } diff --git a/src/box/iproto_constants.h b/src/box/iproto_constants.h index fa9c029a2..030c25531 100644 --- a/src/box/iproto_constants.h +++ b/src/box/iproto_constants.h @@ -132,6 +132,7 @@ enum iproto_metadata_key { IPROTO_FIELD_NAME = 0, IPROTO_FIELD_TYPE = 1, IPROTO_FIELD_COLL = 2, + IPROTO_FIELD_NULLABLE = 3 }; enum iproto_ballot_key { diff --git a/src/box/lua/execute.c b/src/box/lua/execute.c index 8a530bfc1..3d7ca710c 100644 --- a/src/box/lua/execute.c +++ b/src/box/lua/execute.c @@ -24,6 +24,7 @@ lua_sql_get_metadata(struct sql_stmt *stmt, struct lua_State *L, lua_createtable(L, 0, coll != NULL ? 3 : 2); const char *name = sql_column_name(stmt, i); const char *type = sql_column_datatype(stmt, i); + int nullable = sql_column_is_nullable(stmt, i); /* * Can not fail, since all column names are * preallocated during prepare phase and the @@ -39,6 +40,10 @@ lua_sql_get_metadata(struct sql_stmt *stmt, struct lua_State *L, lua_pushstring(L, coll); lua_setfield(L, -2, "collation"); } + if (nullable != -1) { + lua_pushboolean(L, nullable); + lua_setfield(L, -2, "is_nullable"); + } lua_rawseti(L, -2, i + 1); } } diff --git a/src/box/lua/net_box.c b/src/box/lua/net_box.c index afbd1e1be..3e93cbc75 100644 --- a/src/box/lua/net_box.c +++ b/src/box/lua/net_box.c @@ -651,6 +651,11 @@ decode_metadata_optional(struct lua_State *L, const char **data, const char *coll = mp_decode_str(data, &len); lua_pushlstring(L, coll, len); lua_setfield(L, -2, "collation"); + } else { + assert(key == IPROTO_FIELD_NULLABLE); + bool is_nullable = mp_decode_bool(data); + lua_pushboolean(L, is_nullable); + lua_setfield(L, -2, "is_nullable"); } } } @@ -667,7 +672,7 @@ netbox_decode_metadata(struct lua_State *L, const char **data) lua_createtable(L, count, 0); for (uint32_t i = 0; i < count; ++i) { uint32_t map_size = mp_decode_map(data); - assert(map_size == 2 || map_size == 3); + assert(map_size >= 2 && map_size <= 4); (void) map_size; uint32_t key = mp_decode_uint(data); assert(key == IPROTO_FIELD_NAME); diff --git a/src/box/sql/select.c b/src/box/sql/select.c index 66e8c1274..b772bcead 100644 --- a/src/box/sql/select.c +++ b/src/box/sql/select.c @@ -1810,6 +1810,7 @@ generate_column_metadata(struct Parse *pParse, struct SrcList *pTabList, coll_id->name_len); } } + vdbe_set_metadata_col_nullability(v, i, -1); if (pEList->a[i].zName) { char *zName = pEList->a[i].zName; vdbe_set_metadata_col_name(v, i, zName); @@ -1836,7 +1837,10 @@ generate_column_metadata(struct Parse *pParse, struct SrcList *pTabList, } else { vdbe_set_metadata_col_name(v, i, zCol); } - + bool is_nullable = space_def->fields[iCol].is_nullable; + if (p->op == TK_COLUMN) + vdbe_set_metadata_col_nullability(v, i, + is_nullable); } else { const char *z = pEList->a[i].zSpan; if (z == NULL) diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h index 4c2e3ed73..89920b3d1 100644 --- a/src/box/sql/sqlInt.h +++ b/src/box/sql/sqlInt.h @@ -579,6 +579,9 @@ sql_column_datatype(sql_stmt *, int N); const char * sql_column_coll(sql_stmt *stmt, int n); +int +sql_column_is_nullable(sql_stmt *stmt, int n); + int sql_initialize(void); diff --git a/src/box/sql/vdbe.h b/src/box/sql/vdbe.h index 5f042d7af..0f315b660 100644 --- a/src/box/sql/vdbe.h +++ b/src/box/sql/vdbe.h @@ -257,6 +257,9 @@ int vdbe_set_metadata_col_collation(struct Vdbe *p, int idx, const char *coll, size_t coll_len); +void +vdbe_set_metadata_col_nullability(struct Vdbe *p, int idx, int nullable); + void sqlVdbeCountChanges(Vdbe *); sql *sqlVdbeDb(Vdbe *); void sqlVdbeSetSql(Vdbe *, const char *z, int n, int); diff --git a/src/box/sql/vdbeInt.h b/src/box/sql/vdbeInt.h index fba86d664..0e54e42a5 100644 --- a/src/box/sql/vdbeInt.h +++ b/src/box/sql/vdbeInt.h @@ -350,6 +350,11 @@ struct sql_column_metadata { const char *name; const char *type; const char *collation; + /** + * -1 is for any member of result set except for pure + * columns: all other expressions are nullable by default. + */ + int8_t nullable : 2; }; /* diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c index 6895d0ad5..ea8c7c438 100644 --- a/src/box/sql/vdbeapi.c +++ b/src/box/sql/vdbeapi.c @@ -753,6 +753,13 @@ sql_column_coll(sql_stmt *stmt, int n) return p->metadata[n].collation; } +int +sql_column_is_nullable(sql_stmt *stmt, int n) +{ + struct Vdbe *p = (struct Vdbe *) stmt; + assert(n < sql_column_count(stmt) && n >= 0); + return p->metadata[n].nullable; +} /******************************* sql_bind_ ************************** * diff --git a/src/box/sql/vdbeaux.c b/src/box/sql/vdbeaux.c index 1707df7f0..6c3523ba4 100644 --- a/src/box/sql/vdbeaux.c +++ b/src/box/sql/vdbeaux.c @@ -1904,6 +1904,13 @@ vdbe_set_metadata_col_collation(struct Vdbe *p, int idx, const char *coll, return 0; } +void +vdbe_set_metadata_col_nullability(struct Vdbe *p, int idx, int nullable) +{ + assert(idx < p->nResColumn); + p->metadata[idx].nullable = nullable; +} + /* * This routine checks that the sql.nVdbeActive count variable * matches the number of vdbe's in the list sql.pVdbe that are diff --git a/test/box/sql-update-with-nested-select.result b/test/box/sql-update-with-nested-select.result index 4ff090f3a..ea627f769 100644 --- a/test/box/sql-update-with-nested-select.result +++ b/test/box/sql-update-with-nested-select.result @@ -27,8 +27,9 @@ box.execute("UPDATE t1 SET e=e+1 WHERE b IN (SELECT b FROM t1);"); box.execute("SELECT e FROM t1"); --- - metadata: - - name: E - type: integer + - type: integer + name: E + is_nullable: true rows: - [7] - [8] diff --git a/test/sql/boolean.result b/test/sql/boolean.result index 7769d0cb3..339e7d9d0 100644 --- a/test/sql/boolean.result +++ b/test/sql/boolean.result @@ -48,16 +48,18 @@ test_run:cmd("setopt delimiter ''"); SELECT a FROM t WHERE a; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | rows: | - [true] | ... SELECT a FROM t WHERE a != true; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | rows: | - [false] | ... @@ -123,8 +125,9 @@ INSERT INTO ts SELECT * FROM t0; SELECT s FROM ts WHERE s = true; | --- | - metadata: - | - name: S - | type: scalar + | - type: scalar + | name: S + | is_nullable: true | rows: | - [true] | ... @@ -148,8 +151,9 @@ SELECT s FROM ts WHERE s < true; SELECT s FROM ts WHERE s IN (true, 1, 'abcd'); | --- | - metadata: - | - name: S - | type: scalar + | - type: scalar + | name: S + | is_nullable: true | rows: | - [true] | ... @@ -202,14 +206,18 @@ SELECT * FROM t LIMIT 1 OFFSET false; EXPLAIN QUERY PLAN SELECT a FROM t0 WHERE a = true; | --- | - metadata: - | - name: selectid - | type: integer - | - name: order - | type: integer - | - name: from - | type: integer - | - name: detail - | type: text + | - type: integer + | name: selectid + | is_nullable: false + | - type: integer + | name: order + | is_nullable: false + | - type: integer + | name: from + | is_nullable: false + | - type: text + | name: detail + | is_nullable: false | rows: | - [0, 0, 0, 'SEARCH TABLE T0 USING COVERING INDEX I0 (A=?) (~10 rows)'] | ... @@ -748,10 +756,12 @@ WITH RECURSIVE cnt(x, y) AS \ SELECT x, y FROM cnt; | --- | - metadata: - | - name: X - | type: integer - | - name: Y - | type: boolean + | - type: integer + | name: X + | is_nullable: true + | - type: boolean + | name: Y + | is_nullable: true | rows: | - [1, false] | - [2, true] @@ -849,8 +859,9 @@ END AS a0 \ FROM t4; | --- | - metadata: - | - name: I - | type: integer + | - type: integer + | name: I + | is_nullable: false | - name: A0 | type: boolean | rows: @@ -918,8 +929,9 @@ SELECT NOT false; SELECT a, NOT a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: NOT a | type: boolean | rows: @@ -995,8 +1007,9 @@ SELECT false OR false; SELECT a, true AND a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: true AND a | type: boolean | rows: @@ -1006,8 +1019,9 @@ SELECT a, true AND a FROM t; SELECT a, false AND a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: false AND a | type: boolean | rows: @@ -1017,8 +1031,9 @@ SELECT a, false AND a FROM t; SELECT a, true OR a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: true OR a | type: boolean | rows: @@ -1028,8 +1043,9 @@ SELECT a, true OR a FROM t; SELECT a, false OR a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: false OR a | type: boolean | rows: @@ -1039,8 +1055,9 @@ SELECT a, false OR a FROM t; SELECT a, a AND true FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a AND true | type: boolean | rows: @@ -1050,8 +1067,9 @@ SELECT a, a AND true FROM t; SELECT a, a AND false FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a AND false | type: boolean | rows: @@ -1061,8 +1079,9 @@ SELECT a, a AND false FROM t; SELECT a, a OR true FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a OR true | type: boolean | rows: @@ -1072,8 +1091,9 @@ SELECT a, a OR true FROM t; SELECT a, a OR false FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a OR false | type: boolean | rows: @@ -1084,10 +1104,12 @@ SELECT a, a OR false FROM t; SELECT a, a1, a AND a1 FROM t, t6; | --- | - metadata: - | - name: A - | type: boolean - | - name: A1 - | type: boolean + | - type: boolean + | name: A + | is_nullable: false + | - type: boolean + | name: A1 + | is_nullable: false | - name: a AND a1 | type: boolean | rows: @@ -1099,10 +1121,12 @@ SELECT a, a1, a AND a1 FROM t, t6; SELECT a, a1, a OR a1 FROM t, t6; | --- | - metadata: - | - name: A - | type: boolean - | - name: A1 - | type: boolean + | - type: boolean + | name: A + | is_nullable: false + | - type: boolean + | name: A1 + | is_nullable: false | - name: a OR a1 | type: boolean | rows: @@ -1682,8 +1706,9 @@ SELECT false < false; SELECT a, true > a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: true > a | type: boolean | rows: @@ -1693,8 +1718,9 @@ SELECT a, true > a FROM t; SELECT a, false > a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: false > a | type: boolean | rows: @@ -1704,8 +1730,9 @@ SELECT a, false > a FROM t; SELECT a, true < a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: true < a | type: boolean | rows: @@ -1715,8 +1742,9 @@ SELECT a, true < a FROM t; SELECT a, false < a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: false < a | type: boolean | rows: @@ -1726,8 +1754,9 @@ SELECT a, false < a FROM t; SELECT a, a > true FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a > true | type: boolean | rows: @@ -1737,8 +1766,9 @@ SELECT a, a > true FROM t; SELECT a, a > false FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a > false | type: boolean | rows: @@ -1748,8 +1778,9 @@ SELECT a, a > false FROM t; SELECT a, a < true FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a < true | type: boolean | rows: @@ -1759,8 +1790,9 @@ SELECT a, a < true FROM t; SELECT a, a < false FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a < false | type: boolean | rows: @@ -1771,10 +1803,12 @@ SELECT a, a < false FROM t; SELECT a, a1, a > a1 FROM t, t6; | --- | - metadata: - | - name: A - | type: boolean - | - name: A1 - | type: boolean + | - type: boolean + | name: A + | is_nullable: false + | - type: boolean + | name: A1 + | is_nullable: false | - name: a > a1 | type: boolean | rows: @@ -1786,10 +1820,12 @@ SELECT a, a1, a > a1 FROM t, t6; SELECT a, a1, a < a1 FROM t, t6; | --- | - metadata: - | - name: A - | type: boolean - | - name: A1 - | type: boolean + | - type: boolean + | name: A + | is_nullable: false + | - type: boolean + | name: A1 + | is_nullable: false | - name: a < a1 | type: boolean | rows: @@ -1867,8 +1903,9 @@ SELECT false <= false; SELECT a, true >= a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: true >= a | type: any | rows: @@ -1878,8 +1915,9 @@ SELECT a, true >= a FROM t; SELECT a, false >= a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: false >= a | type: any | rows: @@ -1889,8 +1927,9 @@ SELECT a, false >= a FROM t; SELECT a, true <= a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: true <= a | type: boolean | rows: @@ -1900,8 +1939,9 @@ SELECT a, true <= a FROM t; SELECT a, false <= a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: false <= a | type: boolean | rows: @@ -1911,8 +1951,9 @@ SELECT a, false <= a FROM t; SELECT a, a >= true FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a >= true | type: any | rows: @@ -1922,8 +1963,9 @@ SELECT a, a >= true FROM t; SELECT a, a >= false FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a >= false | type: any | rows: @@ -1933,8 +1975,9 @@ SELECT a, a >= false FROM t; SELECT a, a <= true FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a <= true | type: boolean | rows: @@ -1944,8 +1987,9 @@ SELECT a, a <= true FROM t; SELECT a, a <= false FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a <= false | type: boolean | rows: @@ -1956,10 +2000,12 @@ SELECT a, a <= false FROM t; SELECT a, a1, a >= a1 FROM t, t6; | --- | - metadata: - | - name: A - | type: boolean - | - name: A1 - | type: boolean + | - type: boolean + | name: A + | is_nullable: false + | - type: boolean + | name: A1 + | is_nullable: false | - name: a >= a1 | type: any | rows: @@ -1971,10 +2017,12 @@ SELECT a, a1, a >= a1 FROM t, t6; SELECT a, a1, a <= a1 FROM t, t6; | --- | - metadata: - | - name: A - | type: boolean - | - name: A1 - | type: boolean + | - type: boolean + | name: A + | is_nullable: false + | - type: boolean + | name: A1 + | is_nullable: false | - name: a <= a1 | type: boolean | rows: @@ -2052,8 +2100,9 @@ SELECT false != false; SELECT a, true == a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: true == a | type: boolean | rows: @@ -2063,8 +2112,9 @@ SELECT a, true == a FROM t; SELECT a, false == a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: false == a | type: boolean | rows: @@ -2074,8 +2124,9 @@ SELECT a, false == a FROM t; SELECT a, true != a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: true != a | type: boolean | rows: @@ -2085,8 +2136,9 @@ SELECT a, true != a FROM t; SELECT a, false != a FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: false != a | type: boolean | rows: @@ -2096,8 +2148,9 @@ SELECT a, false != a FROM t; SELECT a, a == true FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a == true | type: boolean | rows: @@ -2107,8 +2160,9 @@ SELECT a, a == true FROM t; SELECT a, a == false FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a == false | type: boolean | rows: @@ -2118,8 +2172,9 @@ SELECT a, a == false FROM t; SELECT a, a != true FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a != true | type: boolean | rows: @@ -2129,8 +2184,9 @@ SELECT a, a != true FROM t; SELECT a, a != false FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a != false | type: boolean | rows: @@ -2141,10 +2197,12 @@ SELECT a, a != false FROM t; SELECT a, a1, a == a1 FROM t, t6; | --- | - metadata: - | - name: A - | type: boolean - | - name: A1 - | type: boolean + | - type: boolean + | name: A + | is_nullable: false + | - type: boolean + | name: A1 + | is_nullable: false | - name: a == a1 | type: boolean | rows: @@ -2156,10 +2214,12 @@ SELECT a, a1, a == a1 FROM t, t6; SELECT a, a1, a != a1 FROM t, t6; | --- | - metadata: - | - name: A - | type: boolean - | - name: A1 - | type: boolean + | - type: boolean + | name: A + | is_nullable: false + | - type: boolean + | name: A1 + | is_nullable: false | - name: a != a1 | type: boolean | rows: @@ -2269,8 +2329,9 @@ SELECT false IN (1, 1.2, 'true', false); SELECT a, a IN (true) FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a IN (true) | type: boolean | rows: @@ -2280,8 +2341,9 @@ SELECT a, a IN (true) FROM t; SELECT a, a IN (false) FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a IN (false) | type: boolean | rows: @@ -2291,8 +2353,9 @@ SELECT a, a IN (false) FROM t; SELECT a, a IN (true, false) FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a IN (true, false) | type: boolean | rows: @@ -2302,8 +2365,9 @@ SELECT a, a IN (true, false) FROM t; SELECT a, a IN (SELECT a1 FROM t6 LIMIT 1) FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a IN (SELECT a1 FROM t6 LIMIT 1) | type: boolean | rows: @@ -2313,8 +2377,9 @@ SELECT a, a IN (SELECT a1 FROM t6 LIMIT 1) FROM t; SELECT a, a IN (SELECT a1 FROM t6) FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a IN (SELECT a1 FROM t6) | type: boolean | rows: @@ -2324,8 +2389,9 @@ SELECT a, a IN (SELECT a1 FROM t6) FROM t; SELECT a, a IN (1, 1.2, 'true', false) FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a IN (1, 1.2, 'true', false) | type: boolean | rows: @@ -2401,8 +2467,9 @@ SELECT false BETWEEN false AND true; SELECT a, a BETWEEN true AND true FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a BETWEEN true AND true | type: boolean | rows: @@ -2412,8 +2479,9 @@ SELECT a, a BETWEEN true AND true FROM t; SELECT a, a BETWEEN false AND false FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a BETWEEN false AND false | type: boolean | rows: @@ -2423,8 +2491,9 @@ SELECT a, a BETWEEN false AND false FROM t; SELECT a, a BETWEEN true AND false FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a BETWEEN true AND false | type: boolean | rows: @@ -2434,8 +2503,9 @@ SELECT a, a BETWEEN true AND false FROM t; SELECT a, a BETWEEN false AND true FROM t; | --- | - metadata: - | - name: A - | type: boolean + | - type: boolean + | name: A + | is_nullable: false | - name: a BETWEEN false AND true | type: boolean | rows: @@ -2549,8 +2619,9 @@ SELECT b, true AND b FROM t7; SELECT b, false AND b FROM t7; | --- | - metadata: - | - name: B - | type: integer + | - type: integer + | name: B + | is_nullable: false | - name: false AND b | type: boolean | rows: @@ -2574,8 +2645,9 @@ SELECT b, b AND true FROM t7; SELECT b, b AND false FROM t7; | --- | - metadata: - | - name: B - | type: integer + | - type: integer + | name: B + | is_nullable: false | - name: b AND false | type: boolean | rows: @@ -3882,8 +3954,9 @@ SELECT false IN (SELECT b FROM t7); SELECT a1, a1 IN (0, 1, 2, 3) FROM t6 | --- | - metadata: - | - name: A1 - | type: boolean + | - type: boolean + | name: A1 + | is_nullable: false | - name: a1 IN (0, 1, 2, 3) | type: boolean | rows: @@ -4018,8 +4091,9 @@ SELECT c, true AND c FROM t8; SELECT c, false AND c FROM t8; | --- | - metadata: - | - name: C - | type: number + | - type: number + | name: C + | is_nullable: false | - name: false AND c | type: boolean | rows: @@ -4043,8 +4117,9 @@ SELECT c, c AND true FROM t8; SELECT c, c AND false FROM t8; | --- | - metadata: - | - name: C - | type: number + | - type: number + | name: C + | is_nullable: false | - name: c AND false | type: boolean | rows: @@ -5178,8 +5253,9 @@ SELECT d, true AND d FROM t9; SELECT d, false AND d FROM t9; | --- | - metadata: - | - name: D - | type: string + | - type: string + | name: D + | is_nullable: false | - name: false AND d | type: boolean | rows: @@ -5203,8 +5279,9 @@ SELECT d, d AND true FROM t9; SELECT d, d AND false FROM t9; | --- | - metadata: - | - name: D - | type: string + | - type: string + | name: D + | is_nullable: false | - name: d AND false | type: boolean | rows: @@ -5553,8 +5630,9 @@ SELECT d, true AND d FROM t9 WHERE d = 'TRUE'; SELECT d, false AND d FROM t9 WHERE d = 'TRUE'; | --- | - metadata: - | - name: D - | type: string + | - type: string + | name: D + | is_nullable: false | - name: false AND d | type: boolean | rows: @@ -5578,8 +5656,9 @@ SELECT d, d AND true FROM t9 WHERE d = 'TRUE'; SELECT d, d AND false FROM t9 WHERE d = 'TRUE'; | --- | - metadata: - | - name: D - | type: string + | - type: string + | name: D + | is_nullable: false | - name: d AND false | type: boolean | rows: @@ -5733,8 +5812,9 @@ SELECT d, true AND d FROM t9 WHERE d = 'true'; SELECT d, false AND d FROM t9 WHERE d = 'true'; | --- | - metadata: - | - name: D - | type: string + | - type: string + | name: D + | is_nullable: false | - name: false AND d | type: boolean | rows: @@ -5758,8 +5838,9 @@ SELECT d, d AND true FROM t9 WHERE d = 'true'; SELECT d, d AND false FROM t9 WHERE d = 'true'; | --- | - metadata: - | - name: D - | type: string + | - type: string + | name: D + | is_nullable: false | - name: d AND false | type: boolean | rows: @@ -5913,8 +5994,9 @@ SELECT d, true AND d FROM t9 WHERE d = 'FALSE'; SELECT d, false AND d FROM t9 WHERE d = 'FALSE'; | --- | - metadata: - | - name: D - | type: string + | - type: string + | name: D + | is_nullable: false | - name: false AND d | type: boolean | rows: @@ -5938,8 +6020,9 @@ SELECT d, d AND true FROM t9 WHERE d = 'FALSE'; SELECT d, d AND false FROM t9 WHERE d = 'FALSE'; | --- | - metadata: - | - name: D - | type: string + | - type: string + | name: D + | is_nullable: false | - name: d AND false | type: boolean | rows: @@ -6093,8 +6176,9 @@ SELECT d, true AND d FROM t9 WHERE d = 'false'; SELECT d, false AND d FROM t9 WHERE d = 'false'; | --- | - metadata: - | - name: D - | type: string + | - type: string + | name: D + | is_nullable: false | - name: false AND d | type: boolean | rows: @@ -6118,8 +6202,9 @@ SELECT d, d AND true FROM t9 WHERE d = 'false'; SELECT d, d AND false FROM t9 WHERE d = 'false'; | --- | - metadata: - | - name: D - | type: string + | - type: string + | name: D + | is_nullable: false | - name: d AND false | type: boolean | rows: diff --git a/test/sql/check-clear-ephemeral.result b/test/sql/check-clear-ephemeral.result index 7d0be5ffb..dd9660220 100644 --- a/test/sql/check-clear-ephemeral.result +++ b/test/sql/check-clear-ephemeral.result @@ -25,8 +25,9 @@ box.execute("WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt W box.execute("SELECT a FROM t1 ORDER BY b, a LIMIT 10 OFFSET 20;"); --- - metadata: - - name: A - type: integer + - type: integer + name: A + is_nullable: true rows: - [840] - [880] diff --git a/test/sql/collation.result b/test/sql/collation.result index 137a38bb4..750e9c509 100644 --- a/test/sql/collation.result +++ b/test/sql/collation.result @@ -67,8 +67,9 @@ box.execute([[INSERT INTO tu VALUES ('Latin Small Letter Dotless I U+0131','ı') box.execute([[SELECT descriptor, upper(letter) AS upper,lower(letter) AS lower FROM tu;]]) --- - metadata: - - name: DESCRIPTOR - type: string + - type: string + name: DESCRIPTOR + is_nullable: false - name: UPPER type: string - name: LOWER @@ -83,8 +84,9 @@ box.execute([[SELECT descriptor, upper(letter) AS upper,lower(letter) AS lower F box.execute([[SELECT descriptor, upper(letter COLLATE "TURKISH") AS upper,lower(letter COLLATE "TURKISH") AS lower FROM tu;]]) --- - metadata: - - name: DESCRIPTOR - type: string + - type: string + name: DESCRIPTOR + is_nullable: false - type: string name: UPPER collation: TURKISH @@ -112,12 +114,14 @@ box.execute([[INSERT INTO tu VALUES ('German Small Letter Sharp S U+00DF','ß'); box.execute([[SELECT descriptor, upper(letter), letter FROM tu where UPPER(letter) = 'SS';]]) --- - metadata: - - name: DESCRIPTOR - type: string + - type: string + name: DESCRIPTOR + is_nullable: false - name: upper(letter) type: string - - name: LETTER - type: string + - type: string + name: LETTER + is_nullable: true rows: - ['German Small Letter Sharp S U+00DF', 'SS', 'ß'] ... @@ -125,13 +129,15 @@ box.execute([[SELECT descriptor, upper(letter), letter FROM tu where UPPER(lette box.execute([[SELECT descriptor, upper(letter COLLATE "GERMAN"), letter FROM tu where UPPER(letter COLLATE "GERMAN") = 'SS';]]) --- - metadata: - - name: DESCRIPTOR - type: string + - type: string + name: DESCRIPTOR + is_nullable: false - type: string name: upper(letter COLLATE "GERMAN") collation: GERMAN - - name: LETTER - type: string + - type: string + name: LETTER + is_nullable: true rows: - ['German Small Letter Sharp S U+00DF', 'SS', 'ß'] ... @@ -325,6 +331,7 @@ box.execute("SELECT b FROM t UNION SELECT a FROM t;") --- - metadata: - type: string + is_nullable: true name: B collation: binary rows: [] @@ -332,8 +339,9 @@ box.execute("SELECT b FROM t UNION SELECT a FROM t;") box.execute("SELECT a FROM t UNION SELECT c FROM t;") --- - metadata: - - name: A - type: string + - type: string + name: A + is_nullable: true rows: [] ... box.execute("SELECT c COLLATE \"binary\" FROM t UNION SELECT a FROM t;") @@ -407,6 +415,7 @@ box.execute("SELECT s1 FROM t0;") --- - metadata: - type: string + is_nullable: true name: S1 collation: unicode_ci rows: @@ -469,8 +478,9 @@ box.execute("SELECT * FROM t1;") box.execute("SELECT s1 FROM t0;") --- - metadata: - - name: S1 - type: string + - type: string + name: S1 + is_nullable: true rows: - ['a'] ... @@ -502,8 +512,9 @@ box.execute("INSERT INTO t4a VALUES('ghi','ghi',3);") box.execute("SELECT c FROM t4a WHERE (a||'') = b;") --- - metadata: - - name: C - type: integer + - type: integer + name: C + is_nullable: false rows: - [1] - [3] @@ -514,8 +525,9 @@ box.execute("SELECT c FROM t4a WHERE (a||'') = b;") box.execute("SELECT c FROM t4a WHERE (a COLLATE \"binary\"||'') = b;") --- - metadata: - - name: C - type: integer + - type: integer + name: C + is_nullable: false rows: - [3] ... @@ -538,16 +550,18 @@ box.execute("SELECT c FROM t4a WHERE (a COLLATE \"binary\"||'') = b COLLATE \"un box.execute("SELECT c FROM t4a WHERE (a||'')=(b||'');") --- - metadata: - - name: C - type: integer + - type: integer + name: C + is_nullable: false rows: - [3] ... box.execute("SELECT c FROM t4a WHERE (a||b)=(b||a);") --- - metadata: - - name: C - type: integer + - type: integer + name: C + is_nullable: false rows: - [3] ... @@ -568,8 +582,9 @@ box.execute("INSERT INTO t4b VALUES('ghi','ghi',3);") box.execute("SELECT c FROM t4a WHERE (a||b)=(b||a);") --- - metadata: - - name: C - type: integer + - type: integer + name: C + is_nullable: false rows: - [3] ... @@ -578,8 +593,9 @@ box.execute("SELECT c FROM t4a WHERE (a||b)=(b||a);") box.execute("SELECT c FROM t4a WHERE (a||b COLLATE \"binary\")=(b||a);") --- - metadata: - - name: C - type: integer + - type: integer + name: C + is_nullable: false rows: - [3] ... @@ -603,6 +619,7 @@ box.execute("SELECT a FROM t4b ORDER BY a COLLATE \"unicode_ci\" || ''") --- - metadata: - type: string + is_nullable: true name: A collation: unicode_ci rows: @@ -615,6 +632,7 @@ box.execute("SELECT a FROM t4b ORDER BY a || b") --- - metadata: - type: string + is_nullable: true name: A collation: unicode_ci rows: diff --git a/test/sql/gh-3199-no-mem-leaks.result b/test/sql/gh-3199-no-mem-leaks.result index e7ba1d29c..6dc5ad212 100644 --- a/test/sql/gh-3199-no-mem-leaks.result +++ b/test/sql/gh-3199-no-mem-leaks.result @@ -26,10 +26,12 @@ box.execute('INSERT INTO test VALUES (1, 1, 1), (2, 2, 2)') box.execute('SELECT x, y, x + y FROM test ORDER BY y') --- - metadata: - - name: X - type: integer - - name: Y - type: integer + - type: integer + name: X + is_nullable: true + - type: integer + name: Y + is_nullable: true - name: x + y type: integer rows: @@ -43,10 +45,12 @@ fiber.info()[fiber.self().id()].memory.used box.execute('SELECT x, y, x + y FROM test ORDER BY y') --- - metadata: - - name: X - type: integer - - name: Y - type: integer + - type: integer + name: X + is_nullable: true + - type: integer + name: Y + is_nullable: true - name: x + y type: integer rows: @@ -56,10 +60,12 @@ box.execute('SELECT x, y, x + y FROM test ORDER BY y') box.execute('SELECT x, y, x + y FROM test ORDER BY y') --- - metadata: - - name: X - type: integer - - name: Y - type: integer + - type: integer + name: X + is_nullable: true + - type: integer + name: Y + is_nullable: true - name: x + y type: integer rows: @@ -69,10 +75,12 @@ box.execute('SELECT x, y, x + y FROM test ORDER BY y') box.execute('SELECT x, y, x + y FROM test ORDER BY y') --- - metadata: - - name: X - type: integer - - name: Y - type: integer + - type: integer + name: X + is_nullable: true + - type: integer + name: Y + is_nullable: true - name: x + y type: integer rows: @@ -82,10 +90,12 @@ box.execute('SELECT x, y, x + y FROM test ORDER BY y') box.execute('SELECT x, y, x + y FROM test ORDER BY y') --- - metadata: - - name: X - type: integer - - name: Y - type: integer + - type: integer + name: X + is_nullable: true + - type: integer + name: Y + is_nullable: true - name: x + y type: integer rows: @@ -111,12 +121,14 @@ box.execute('INSERT INTO test2 VALUES (3, \'test\', 3), (4, \'xx\', 4)') box.execute('SELECT a, id + 2, b FROM test2 WHERE b < id * 2 ORDER BY a ') --- - metadata: - - name: A - type: string + - type: string + name: A + is_nullable: true - name: id + 2 type: integer - - name: B - type: integer + - type: integer + name: B + is_nullable: true rows: - ['abc', 3, 1] - ['hello', 4, 2] @@ -130,12 +142,14 @@ fiber.info()[fiber.self().id()].memory.used box.execute('SELECT a, id + 2 * b, a FROM test2 WHERE b < id * 2 ORDER BY a ') --- - metadata: - - name: A - type: string + - type: string + name: A + is_nullable: true - name: id + 2 * b type: integer - - name: A - type: string + - type: string + name: A + is_nullable: true rows: - ['abc', 3, 'abc'] - ['hello', 6, 'hello'] @@ -145,12 +159,14 @@ box.execute('SELECT a, id + 2 * b, a FROM test2 WHERE b < id * 2 ORDER BY a ') box.execute('SELECT a, id + 2 * b, a FROM test2 WHERE b < id * 2 ORDER BY a ') --- - metadata: - - name: A - type: string + - type: string + name: A + is_nullable: true - name: id + 2 * b type: integer - - name: A - type: string + - type: string + name: A + is_nullable: true rows: - ['abc', 3, 'abc'] - ['hello', 6, 'hello'] @@ -160,12 +176,14 @@ box.execute('SELECT a, id + 2 * b, a FROM test2 WHERE b < id * 2 ORDER BY a ') box.execute('SELECT a, id + 2 * b, a FROM test2 WHERE b < id * 2 ORDER BY a ') --- - metadata: - - name: A - type: string + - type: string + name: A + is_nullable: true - name: id + 2 * b type: integer - - name: A - type: string + - type: string + name: A + is_nullable: true rows: - ['abc', 3, 'abc'] - ['hello', 6, 'hello'] @@ -179,12 +197,14 @@ fiber.info()[fiber.self().id()].memory.used box.execute('SELECT x, y + 3 * b, b FROM test2, test WHERE b = x') --- - metadata: - - name: X - type: integer + - type: integer + name: X + is_nullable: true - name: y + 3 * b type: integer - - name: B - type: integer + - type: integer + name: B + is_nullable: true rows: - [1, 4, 1] - [2, 8, 2] @@ -192,12 +212,14 @@ box.execute('SELECT x, y + 3 * b, b FROM test2, test WHERE b = x') box.execute('SELECT x, y + 3 * b, b FROM test2, test WHERE b = x') --- - metadata: - - name: X - type: integer + - type: integer + name: X + is_nullable: true - name: y + 3 * b type: integer - - name: B - type: integer + - type: integer + name: B + is_nullable: true rows: - [1, 4, 1] - [2, 8, 2] @@ -205,12 +227,14 @@ box.execute('SELECT x, y + 3 * b, b FROM test2, test WHERE b = x') box.execute('SELECT x, y + 3 * b, b FROM test2, test WHERE b = x') --- - metadata: - - name: X - type: integer + - type: integer + name: X + is_nullable: true - name: y + 3 * b type: integer - - name: B - type: integer + - type: integer + name: B + is_nullable: true rows: - [1, 4, 1] - [2, 8, 2] diff --git a/test/sql/gh2141-delete-trigger-drop-table.result b/test/sql/gh2141-delete-trigger-drop-table.result index 1d373f57e..735b932a5 100644 --- a/test/sql/gh2141-delete-trigger-drop-table.result +++ b/test/sql/gh2141-delete-trigger-drop-table.result @@ -41,10 +41,12 @@ box.execute("CREATE TRIGGER tt_ad AFTER DELETE ON t FOR EACH ROW BEGIN SELECT 1; box.execute("SELECT \"name\", \"opts\" FROM \"_trigger\"") --- - metadata: - - name: name - type: string - - name: opts - type: map + - type: string + name: name + is_nullable: false + - type: map + name: opts + is_nullable: false rows: - ['TT_AD', {'sql': 'CREATE TRIGGER tt_ad AFTER DELETE ON t FOR EACH ROW BEGIN SELECT 1; END'}] @@ -68,9 +70,11 @@ box.execute("DROP TABLE t") box.execute("SELECT \"name\", \"opts\" FROM \"_trigger\"") --- - metadata: - - name: name - type: string - - name: opts - type: map + - type: string + name: name + is_nullable: false + - type: map + name: opts + is_nullable: false rows: [] ... diff --git a/test/sql/gh2251-multiple-update.result b/test/sql/gh2251-multiple-update.result index 42ebf7f55..a56c4b8b7 100644 --- a/test/sql/gh2251-multiple-update.result +++ b/test/sql/gh2251-multiple-update.result @@ -29,8 +29,9 @@ box.execute("UPDATE t1 SET e=e+1 WHERE b IN (SELECT b FROM t1);") box.execute("SELECT e FROM t1") --- - metadata: - - name: E - type: integer + - type: integer + name: E + is_nullable: true rows: - [7] - [8] @@ -54,8 +55,9 @@ box.execute("UPDATE t2 SET e=e+1 WHERE b IN (SELECT b FROM t2);") box.execute("SELECT e FROM t2") --- - metadata: - - name: E - type: integer + - type: integer + name: E + is_nullable: true rows: - [6] - [7] diff --git a/test/sql/iproto.result b/test/sql/iproto.result index 67acd0ac1..05c59318c 100644 --- a/test/sql/iproto.result +++ b/test/sql/iproto.result @@ -682,18 +682,24 @@ res = cn:execute("PRAGMA table_info(t1)") ... res.metadata --- -- - name: cid - type: integer - - name: name - type: text - - name: type - type: text - - name: notnull - type: integer - - name: dflt_value - type: text - - name: pk - type: integer +- - type: integer + name: cid + is_nullable: false + - type: text + name: name + is_nullable: false + - type: text + name: type + is_nullable: false + - type: integer + name: notnull + is_nullable: false + - type: text + name: dflt_value + is_nullable: false + - type: integer + name: pk + is_nullable: false ... -- EXPLAIN res = cn:execute("EXPLAIN SELECT 1") @@ -701,36 +707,48 @@ res = cn:execute("EXPLAIN SELECT 1") ... res.metadata --- -- - name: addr - type: integer - - name: opcode - type: text - - name: p1 - type: integer - - name: p2 - type: integer - - name: p3 - type: integer - - name: p4 - type: text - - name: p5 - type: text - - name: comment - type: text +- - type: integer + name: addr + is_nullable: false + - type: text + name: opcode + is_nullable: false + - type: integer + name: p1 + is_nullable: false + - type: integer + name: p2 + is_nullable: false + - type: integer + name: p3 + is_nullable: false + - type: text + name: p4 + is_nullable: false + - type: text + name: p5 + is_nullable: false + - type: text + name: comment + is_nullable: false ... res = cn:execute("EXPLAIN QUERY PLAN SELECT COUNT(*) FROM t1") --- ... res.metadata --- -- - name: selectid - type: integer - - name: order - type: integer - - name: from - type: integer - - name: detail - type: text +- - type: integer + name: selectid + is_nullable: false + - type: integer + name: order + is_nullable: false + - type: integer + name: from + is_nullable: false + - type: text + name: detail + is_nullable: false ... -- When pragma count_changes is on, statements INSERT, REPLACE and -- UPDATE returns number of changed columns. Make sure that this @@ -742,24 +760,27 @@ cn:execute("PRAGMA count_changes = 1;") cn:execute("INSERT INTO t1 VALUES (1), (2), (3);") --- - metadata: - - name: rows inserted - type: integer + - type: integer + name: rows inserted + is_nullable: false rows: - [3] ... cn:execute("REPLACE INTO t1 VALUES (2), (3), (4), (5);") --- - metadata: - - name: rows replaced - type: integer + - type: integer + name: rows replaced + is_nullable: false rows: - [4] ... cn:execute("UPDATE t1 SET id = id + 100 WHERE id > 10;") --- - metadata: - - name: rows updated - type: integer + - type: integer + name: rows updated + is_nullable: false rows: - [0] ... diff --git a/test/sql/misc.result b/test/sql/misc.result index a157ddbc1..820cf5119 100644 --- a/test/sql/misc.result +++ b/test/sql/misc.result @@ -174,10 +174,12 @@ s:insert(t) box.execute('SELECT field70, field64 FROM test') --- - metadata: - - name: FIELD70 - type: unsigned - - name: FIELD64 - type: unsigned + - type: unsigned + name: FIELD70 + is_nullable: false + - type: unsigned + name: FIELD64 + is_nullable: false rows: - [70, 64] ... @@ -188,12 +190,15 @@ pk:alter({parts = {66}}) box.execute('SELECT field66, field68, field70 FROM test') --- - metadata: - - name: FIELD66 - type: unsigned - - name: FIELD68 - type: unsigned - - name: FIELD70 - type: unsigned + - type: unsigned + name: FIELD66 + is_nullable: false + - type: unsigned + name: FIELD68 + is_nullable: false + - type: unsigned + name: FIELD70 + is_nullable: false rows: - [66, 68, 70] ... diff --git a/test/sql/on-conflict.result b/test/sql/on-conflict.result index 6851e217e..909b68d8f 100644 --- a/test/sql/on-conflict.result +++ b/test/sql/on-conflict.result @@ -130,10 +130,12 @@ box.execute("UPDATE OR IGNORE tj SET s1 = s1 + 1;") box.execute("SELECT s1, s2 FROM tj;") --- - metadata: - - name: S1 - type: integer - - name: S2 - type: integer + - type: integer + name: S1 + is_nullable: true + - type: integer + name: S2 + is_nullable: true rows: - [1, 2] - [3, 3] @@ -145,10 +147,12 @@ box.execute("UPDATE OR IGNORE tj SET s2 = s2 + 1;") box.execute("SELECT s1, s2 FROM tj;") --- - metadata: - - name: S1 - type: integer - - name: S2 - type: integer + - type: integer + name: S1 + is_nullable: true + - type: integer + name: S2 + is_nullable: true rows: - [1, 2] - [3, 4] diff --git a/test/sql/persistency.result b/test/sql/persistency.result index f8f992c39..90c4b36a6 100644 --- a/test/sql/persistency.result +++ b/test/sql/persistency.result @@ -38,10 +38,12 @@ box.execute("INSERT INTO foobar VALUES (1, 'duplicate')") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -54,10 +56,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar LIMIT 2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -69,10 +73,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar LIMIT 2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo=2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -83,10 +89,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo=2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -97,10 +105,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>=2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -112,10 +122,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>=2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo=10000") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -125,10 +137,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo=10000") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>10000") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -138,10 +152,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>10000") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -152,10 +168,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<2.001") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -167,10 +185,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<2.001") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<=2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -182,10 +202,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<=2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<100") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -197,10 +219,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<100") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE bar='foo'") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -227,10 +251,12 @@ box.execute("SELECT count(*) FROM foobar WHERE bar='foo'") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar ORDER BY bar") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -243,10 +269,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar ORDER BY bar") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar ORDER BY bar DESC") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -320,10 +348,12 @@ box.execute("CREATE TRIGGER tfoobar AFTER INSERT ON foobar FOR EACH ROW BEGIN IN box.execute("SELECT \"name\", \"opts\" FROM \"_trigger\""); --- - metadata: - - name: name - type: string - - name: opts - type: map + - type: string + name: name + is_nullable: false + - type: map + name: opts + is_nullable: false rows: - ['TFOOBAR', {'sql': 'CREATE TRIGGER tfoobar AFTER INSERT ON foobar FOR EACH ROW BEGIN INSERT INTO barfoo VALUES (''trigger test'', 9999); END'}] @@ -340,8 +370,9 @@ box.execute("WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt W box.execute("SELECT a FROM t1 ORDER BY b, a LIMIT 10 OFFSET 20;"); --- - metadata: - - name: A - type: integer + - type: integer + name: A + is_nullable: true rows: - [840] - [880] @@ -359,10 +390,12 @@ test_run:cmd('restart server default'); box.execute("SELECT \"name\", \"opts\" FROM \"_trigger\""); --- - metadata: - - name: name - type: string - - name: opts - type: map + - type: string + name: name + is_nullable: false + - type: map + name: opts + is_nullable: false rows: - ['TFOOBAR', {'sql': 'CREATE TRIGGER tfoobar AFTER INSERT ON foobar FOR EACH ROW BEGIN INSERT INTO barfoo VALUES (''trigger test'', 9999); END'}] @@ -386,10 +419,12 @@ box.execute("SELECT * FROM barfoo WHERE foo = 9999"); box.execute("SELECT \"name\", \"opts\" FROM \"_trigger\"") --- - metadata: - - name: name - type: string - - name: opts - type: map + - type: string + name: name + is_nullable: false + - type: map + name: opts + is_nullable: false rows: - ['TFOOBAR', {'sql': 'CREATE TRIGGER tfoobar AFTER INSERT ON foobar FOR EACH ROW BEGIN INSERT INTO barfoo VALUES (''trigger test'', 9999); END'}] @@ -409,10 +444,12 @@ box.execute("DROP TRIGGER tfoobar") box.execute("SELECT \"name\", \"opts\" FROM \"_trigger\"") --- - metadata: - - name: name - type: string - - name: opts - type: map + - type: string + name: name + is_nullable: false + - type: map + name: opts + is_nullable: false rows: [] ... -- prove barfoo2 still exists @@ -447,8 +484,9 @@ box.execute("SELECT * FROM foobar"); box.execute("SELECT a FROM t1 ORDER BY b, a LIMIT 10 OFFSET 20;"); --- - metadata: - - name: A - type: integer + - type: integer + name: A + is_nullable: true rows: - [840] - [880] diff --git a/test/sql/row-count.result b/test/sql/row-count.result index 6bf74ed9b..23af45e39 100644 --- a/test/sql/row-count.result +++ b/test/sql/row-count.result @@ -295,14 +295,18 @@ box.execute("SELECT ROW_COUNT();") box.execute("EXPLAIN QUERY PLAN INSERT INTO t1 VALUES ('b'), ('c'), ('d');") --- - metadata: - - name: selectid - type: integer - - name: order - type: integer - - name: from - type: integer - - name: detail - type: text + - type: integer + name: selectid + is_nullable: false + - type: integer + name: order + is_nullable: false + - type: integer + name: from + is_nullable: false + - type: text + name: detail + is_nullable: false rows: - [0, 0, 0, 'SCAN TABLE T2 (~262144 rows)'] ... @@ -317,8 +321,9 @@ box.execute("SELECT ROW_COUNT();") box.execute('PRAGMA recursive_triggers') --- - metadata: - - name: recursive_triggers - type: integer + - type: integer + name: recursive_triggers + is_nullable: false rows: - [1] ... diff --git a/test/sql/sql-debug.result b/test/sql/sql-debug.result index b19075366..cdaed9a00 100644 --- a/test/sql/sql-debug.result +++ b/test/sql/sql-debug.result @@ -18,8 +18,9 @@ box.execute('PRAGMA parser_trace = 1') box.execute('PRAGMA parser_trace') --- - metadata: - - name: parser_trace - type: integer + - type: integer + name: parser_trace + is_nullable: false rows: - [1] ... @@ -33,10 +34,12 @@ box.execute('PRAGMA parser_trace = '.. result[1][1]) box.execute('PRAGMA') --- - metadata: - - name: pragma_name - type: text - - name: pragma_value - type: integer + - type: text + name: pragma_name + is_nullable: false + - type: integer + name: pragma_value + is_nullable: false rows: - ['count_changes', 0] - ['defer_foreign_keys', 0] diff --git a/test/sql/transition.result b/test/sql/transition.result index 9738092fe..bba4ddefc 100644 --- a/test/sql/transition.result +++ b/test/sql/transition.result @@ -35,10 +35,12 @@ box.execute("INSERT INTO foobar VALUES (1, 'duplicate')") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -51,10 +53,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar LIMIT 2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -66,10 +70,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar LIMIT 2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo=2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -80,10 +86,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo=2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -94,10 +102,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>=2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -109,10 +119,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>=2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo=10000") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -122,10 +134,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo=10000") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>10000") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -135,10 +149,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo>10000") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -149,10 +165,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<2.001") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -164,10 +182,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<2.001") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<=2") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -179,10 +199,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<=2") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<100") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -194,10 +216,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE foo<100") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar WHERE bar='foo'") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -224,10 +248,12 @@ box.execute("SELECT count(*) FROM foobar WHERE bar='foo'") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar ORDER BY bar") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -240,10 +266,12 @@ box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar ORDER BY bar") box.execute("SELECT bar, foo, 42, 'awesome' FROM foobar ORDER BY bar DESC") --- - metadata: - - name: BAR - type: string - - name: FOO - type: integer + - type: string + name: BAR + is_nullable: true + - type: integer + name: FOO + is_nullable: false - name: '42' type: integer - name: '''awesome''' @@ -318,10 +346,12 @@ box.execute("INSERT INTO barfoo VALUES ('xfoo', 1)") box.execute("SELECT foo, bar FROM barfoo") --- - metadata: - - name: FOO - type: number - - name: BAR - type: string + - type: number + name: FOO + is_nullable: false + - type: string + name: BAR + is_nullable: true rows: - [1, 'foo'] - [2, 'bar'] @@ -330,30 +360,36 @@ box.execute("SELECT foo, bar FROM barfoo") box.execute("SELECT foo, bar FROM barfoo WHERE foo==2") --- - metadata: - - name: FOO - type: number - - name: BAR - type: string + - type: number + name: FOO + is_nullable: false + - type: string + name: BAR + is_nullable: true rows: - [2, 'bar'] ... box.execute("SELECT foo, bar FROM barfoo WHERE bar=='foobar'") --- - metadata: - - name: FOO - type: number - - name: BAR - type: string + - type: number + name: FOO + is_nullable: false + - type: string + name: BAR + is_nullable: true rows: - [1000, 'foobar'] ... box.execute("SELECT foo, bar FROM barfoo WHERE foo>=2") --- - metadata: - - name: FOO - type: number - - name: BAR - type: string + - type: number + name: FOO + is_nullable: false + - type: string + name: BAR + is_nullable: true rows: - [2, 'bar'] - [1000, 'foobar'] @@ -361,10 +397,12 @@ box.execute("SELECT foo, bar FROM barfoo WHERE foo>=2") box.execute("SELECT foo, bar FROM barfoo WHERE foo<=2") --- - metadata: - - name: FOO - type: number - - name: BAR - type: string + - type: number + name: FOO + is_nullable: false + - type: string + name: BAR + is_nullable: true rows: - [1, 'foo'] - [2, 'bar'] diff --git a/test/sql/types.result b/test/sql/types.result index 1ad52e8c7..eb1eac989 100644 --- a/test/sql/types.result +++ b/test/sql/types.result @@ -375,37 +375,42 @@ box.execute("INSERT INTO t1 VALUES (1, 1);") box.execute("SELECT a FROM t1 WHERE a IN (1.1, 2.1);") --- - metadata: - - name: A - type: integer + - type: integer + name: A + is_nullable: true rows: [] ... box.execute("SELECT a FROM t1 WHERE a = 1.1;") --- - metadata: - - name: A - type: integer + - type: integer + name: A + is_nullable: true rows: [] ... box.execute("SELECT a FROM t1 WHERE a = 1.0;") --- - metadata: - - name: A - type: integer + - type: integer + name: A + is_nullable: true rows: - [1] ... box.execute("SELECT a FROM t1 WHERE a > 1.1;") --- - metadata: - - name: A - type: integer + - type: integer + name: A + is_nullable: true rows: [] ... box.execute("SELECT a FROM t1 WHERE a < 1.1;") --- - metadata: - - name: A - type: integer + - type: integer + name: A + is_nullable: true rows: - [1] ... @@ -427,23 +432,26 @@ box.execute("INSERT INTO t1 VALUES (1, 1, 1);") box.execute("SELECT a FROM t1 WHERE a = 1.0 AND b > 0.5;") --- - metadata: - - name: A - type: integer + - type: integer + name: A + is_nullable: true rows: - [1] ... box.execute("SELECT a FROM t1 WHERE a = 1.5 AND b IS NULL;") --- - metadata: - - name: A - type: integer + - type: integer + name: A + is_nullable: true rows: [] ... box.execute("SELECT a FROM t1 WHERE a IS NULL AND b IS NULL;") --- - metadata: - - name: A - type: integer + - type: integer + name: A + is_nullable: true rows: [] ... box.space.T1:drop() @@ -474,8 +482,9 @@ s:insert({ 1, 1 }) box.execute("SELECT a FROM t1 WHERE a IN (1.1, 2.1);") --- - metadata: - - name: A - type: unsigned + - type: unsigned + name: A + is_nullable: false rows: [] ... s:drop() @@ -711,8 +720,9 @@ box.execute("INSERT INTO t VALUES (3, 18446744073709551613)") box.execute("SELECT i FROM t;") --- - metadata: - - name: I - type: integer + - type: integer + name: I + is_nullable: true rows: - [18446744073709551615] - [18446744073709551614] @@ -721,16 +731,18 @@ box.execute("SELECT i FROM t;") box.execute("SELECT i FROM t WHERE i = 18446744073709551615;") --- - metadata: - - name: I - type: integer + - type: integer + name: I + is_nullable: true rows: - [18446744073709551615] ... box.execute("SELECT i FROM t WHERE i BETWEEN 18446744073709551613 AND 18446744073709551615;") --- - metadata: - - name: I - type: integer + - type: integer + name: I + is_nullable: true rows: - [18446744073709551615] - [18446744073709551614] @@ -739,8 +751,9 @@ box.execute("SELECT i FROM t WHERE i BETWEEN 18446744073709551613 AND 1844674407 box.execute("SELECT i FROM t ORDER BY i;") --- - metadata: - - name: I - type: integer + - type: integer + name: I + is_nullable: true rows: - [18446744073709551613] - [18446744073709551614] @@ -754,8 +767,9 @@ box.execute("SELECT i FROM t ORDER BY -i;") box.execute("SELECT i FROM t ORDER BY i LIMIT 1;") --- - metadata: - - name: I - type: integer + - type: integer + name: I + is_nullable: true rows: - [18446744073709551613] ... @@ -896,16 +910,18 @@ box.execute("CREATE INDEX i ON t(i);") box.execute("SELECT i FROM t WHERE i = 18446744073709551613;") --- - metadata: - - name: I - type: integer + - type: integer + name: I + is_nullable: true rows: - [18446744073709551613] ... box.execute("SELECT i FROM t WHERE i >= 18446744073709551613 ORDER BY i;") --- - metadata: - - name: I - type: integer + - type: integer + name: I + is_nullable: true rows: - [18446744073709551613] ... @@ -916,8 +932,9 @@ box.execute("UPDATE t SET i = 18446744073709551615 WHERE i = 1844674407370955161 box.execute("SELECT i FROM t;") --- - metadata: - - name: I - type: integer + - type: integer + name: I + is_nullable: true rows: - [18446744073709551615] ... @@ -1072,8 +1089,9 @@ box.execute("INSERT INTO t1 VALUES (-3);") box.execute("SELECT id FROM t1;") --- - metadata: - - name: ID - type: unsigned + - type: unsigned + name: ID + is_nullable: false rows: - [0] - [1] @@ -1361,16 +1379,18 @@ box.execute("CREATE INDEX iv ON t(v);") box.execute("SELECT v FROM t WHERE v = x'616263';") --- - metadata: - - name: V - type: varbinary + - type: varbinary + name: V + is_nullable: true rows: - ['abc'] ... box.execute("SELECT v FROM t ORDER BY v;") --- - metadata: - - name: V - type: varbinary + - type: varbinary + name: V + is_nullable: true rows: - ['abc'] ... @@ -1381,8 +1401,9 @@ box.execute("UPDATE t SET v = x'636261' WHERE v = x'616263';") box.execute("SELECT v FROM t;") --- - metadata: - - name: V - type: varbinary + - type: varbinary + name: V + is_nullable: true rows: - ['cba'] ... diff --git a/test/sql/update-with-nested-select.result b/test/sql/update-with-nested-select.result index 31724307f..84b2d79aa 100644 --- a/test/sql/update-with-nested-select.result +++ b/test/sql/update-with-nested-select.result @@ -34,8 +34,9 @@ box.execute("UPDATE t1 SET e=e+1 WHERE b IN (SELECT b FROM t1);"); box.execute("SELECT e FROM t1"); --- - metadata: - - name: E - type: integer + - type: integer + name: E + is_nullable: true rows: - [7] - [8] -- 2.15.1