From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng2.m.smailru.net (smtpng2.m.smailru.net [94.100.179.3]) (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 9C4FB4696C3 for ; Mon, 30 Dec 2019 13:19:30 +0300 (MSK) From: imeevma@tarantool.org Date: Mon, 30 Dec 2019 13:19:29 +0300 Message-Id: In-Reply-To: References: Subject: [Tarantool-patches] [PATCH v5 2/5] sql: remove PRAGMA "short_column_names" List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: korablev@tarantool.org Cc: tarantool-patches@dev.tarantool.org The pragmas "short_column_names" and "full_column_names" allow us to use three ways to display the column name in metadata: 1) If both are turned off, then the column name was shown as it was written by the user. 2) If "short_column_names" = OFF and "full_column_names" = ON, then the column name is displayed as .. 3) If "short_column_names" = ON, then the column name is displayed as . This is the default option. But we need only two ways to show the column name: 1) Show the column name as . This should be the default option. 2) Show the column name as
.. In this regard, we need only one of these pragmas. Part of #4511 --- src/box/sql.c | 3 +- src/box/sql/pragma.h | 68 +++++++++++++++++++------------------------ src/box/sql/select.c | 20 +++++-------- src/box/sql/sqlInt.h | 1 - test/sql-tap/colname.test.lua | 37 +++++++---------------- test/sql-tap/select1.test.lua | 13 ++------- test/sql/sql-debug.result | 1 - 7 files changed, 52 insertions(+), 91 deletions(-) diff --git a/src/box/sql.c b/src/box/sql.c index cc82617..900c716 100644 --- a/src/box/sql.c +++ b/src/box/sql.c @@ -59,8 +59,7 @@ static sql *db = NULL; static const char nil_key[] = { 0x90 }; /* Empty MsgPack array. */ -static const uint32_t default_sql_flags = SQL_ShortColNames - | SQL_EnableTrigger +static const uint32_t default_sql_flags = SQL_EnableTrigger | SQL_AutoIndex | SQL_RecTriggers; diff --git a/src/box/sql/pragma.h b/src/box/sql/pragma.h index d122a13..cf235a0 100644 --- a/src/box/sql/pragma.h +++ b/src/box/sql/pragma.h @@ -111,39 +111,36 @@ static const char *const pragCName[] = { /* Used by: select_trace */ /* 68 */ "select_trace", /* 69 */ "integer", - /* Used by: short_column_names */ - /* 70 */ "short_column_names", - /* 71 */ "integer", /* Used by: sql_compound_select_limit */ - /* 72 */ "sql_compound_select_limit", - /* 73 */ "integer", + /* 70 */ "sql_compound_select_limit", + /* 71 */ "integer", /* Used by: sql_default_engine */ - /* 74 */ "sql_default_engine", - /* 75 */ "text", + /* 72 */ "sql_default_engine", + /* 73 */ "text", /* Used by: sql_trace */ - /* 76 */ "sql_trace", - /* 77 */ "integer", + /* 74 */ "sql_trace", + /* 75 */ "integer", /* Used by: vdbe_addoptrace */ - /* 78 */ "vdbe_addoptrace", - /* 79 */ "integer", + /* 76 */ "vdbe_addoptrace", + /* 77 */ "integer", /* Used by: vdbe_debug */ - /* 80 */ "vdbe_debug", - /* 81 */ "integer", + /* 78 */ "vdbe_debug", + /* 79 */ "integer", /* Used by: vdbe_eqp */ - /* 82 */ "vdbe_eqp", - /* 83 */ "integer", + /* 80 */ "vdbe_eqp", + /* 81 */ "integer", /* Used by: vdbe_listing */ - /* 84 */ "vdbe_listing", - /* 85 */ "integer", + /* 82 */ "vdbe_listing", + /* 83 */ "integer", /* Used by: vdbe_trace */ - /* 86 */ "vdbe_trace", - /* 87 */ "integer", + /* 84 */ "vdbe_trace", + /* 85 */ "integer", /* Used by: where_trace */ - /* 88 */ "where_trace", - /* 89 */ "integer", + /* 86 */ "where_trace", + /* 87 */ "integer", /* Used by: full_metadata */ - /* 90 */ "full_metadata", - /* 91 */ "integer", + /* 88 */ "full_metadata", + /* 89 */ "integer", }; /* Definitions of all built-in pragmas */ @@ -184,7 +181,7 @@ static const PragmaName aPragmaName[] = { { /* zName: */ "full_metadata", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 90, 1, + /* ColNames: */ 88, 1, /* iArg: */ SQL_FullMetadata}, { /* zName: */ "index_info", /* ePragTyp: */ PragTyp_INDEX_INFO, @@ -222,26 +219,21 @@ static const PragmaName aPragmaName[] = { /* ColNames: */ 68, 1, /* iArg: */ SQL_SelectTrace}, #endif - { /* zName: */ "short_column_names", - /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 70, 1, - /* iArg: */ SQL_ShortColNames}, { /* zName: */ "sql_compound_select_limit", /* ePragTyp: */ PragTyp_COMPOUND_SELECT_LIMIT, /* ePragFlg: */ PragFlg_Result0, - /* ColNames: */ 72, 1, + /* ColNames: */ 70, 1, /* iArg: */ 0}, { /* zName: */ "sql_default_engine", /* ePragTyp: */ PragTyp_DEFAULT_ENGINE, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 74, 1, + /* ColNames: */ 72, 1, /* iArg: */ 0}, #if defined(SQL_DEBUG) { /* zName: */ "sql_trace", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 76, 1, + /* ColNames: */ 74, 1, /* iArg: */ SQL_SqlTrace}, #endif { /* zName: */ "stats", @@ -260,33 +252,33 @@ static const PragmaName aPragmaName[] = { { /* zName: */ "vdbe_addoptrace", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 78, 1, + /* ColNames: */ 76, 1, /* iArg: */ SQL_VdbeAddopTrace}, { /* zName: */ "vdbe_debug", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 80, 1, + /* ColNames: */ 78, 1, /* iArg: */ SQL_SqlTrace | SQL_VdbeListing | SQL_VdbeTrace}, { /* zName: */ "vdbe_eqp", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 82, 1, + /* ColNames: */ 80, 1, /* iArg: */ SQL_VdbeEQP}, { /* zName: */ "vdbe_listing", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 84, 1, + /* ColNames: */ 82, 1, /* iArg: */ SQL_VdbeListing}, { /* zName: */ "vdbe_trace", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 86, 1, + /* ColNames: */ 84, 1, /* iArg: */ SQL_VdbeTrace}, { /* zName: */ "where_trace", /* ePragTyp: */ PragTyp_FLAG, /* ePragFlg: */ PragFlg_Result0 | PragFlg_NoColumns1, - /* ColNames: */ 88, 1, + /* ColNames: */ 86, 1, /* iArg: */ SQL_WhereTrace}, #endif }; diff --git a/src/box/sql/select.c b/src/box/sql/select.c index 5dd8cd5..0fc86e5 100644 --- a/src/box/sql/select.c +++ b/src/box/sql/select.c @@ -1763,7 +1763,6 @@ generate_column_metadata(struct Parse *pParse, struct SrcList *pTabList, Vdbe *v = pParse->pVdbe; int i, j; sql *db = pParse->db; - int fullNames, shortNames; /* If this is an EXPLAIN, skip this step */ if (pParse->explain) { return; @@ -1781,8 +1780,6 @@ generate_column_metadata(struct Parse *pParse, struct SrcList *pTabList, } assert(pTabList != 0); pParse->colNamesSet = 1; - fullNames = (pParse->sql_flags & SQL_FullColNames) != 0; - shortNames = (pParse->sql_flags & SQL_ShortColNames) != 0; bool is_full_meta = (pParse->sql_flags & SQL_FullMetadata) != 0; sqlVdbeSetNumCols(v, pEList->nExpr); uint32_t var_count = 0; @@ -1828,11 +1825,12 @@ generate_column_metadata(struct Parse *pParse, struct SrcList *pTabList, struct space_def *space_def = space->def; assert(iCol >= 0 && iCol < (int)space_def->field_count); zCol = space_def->fields[iCol].name; - const char *name = colname; - if (name == NULL) { - if (!shortNames && !fullNames) { - name = span; - } else if (fullNames) { + const char *name = NULL; + if (pEList->a[i].zName != NULL) { + name = pEList->a[i].zName; + } else { + int flags = pParse->sql_flags; + if ((flags & SQL_FullColNames) != 0) { name = tt_sprintf("%s.%s", space_def->name, zCol); @@ -2057,8 +2055,7 @@ sqlResultSetOfSelect(Parse * pParse, Select * pSelect) sql *db = pParse->db; uint32_t saved_flags = pParse->sql_flags; - pParse->sql_flags |= ~SQL_FullColNames; - pParse->sql_flags &= SQL_ShortColNames; + pParse->sql_flags = 0; sqlSelectPrep(pParse, pSelect, 0); if (pParse->is_aborted) return NULL; @@ -4962,8 +4959,7 @@ selectExpander(Walker * pWalker, Select * p) struct ExprList_item *a = pEList->a; ExprList *pNew = 0; uint32_t flags = pParse->sql_flags; - int longNames = (flags & SQL_FullColNames) != 0 - && (flags & SQL_ShortColNames) == 0; + int longNames = (flags & SQL_FullColNames) != 0; for (k = 0; k < pEList->nExpr; k++) { pE = a[k].pExpr; diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h index 4678eff..d1d1a11 100644 --- a/src/box/sql/sqlInt.h +++ b/src/box/sql/sqlInt.h @@ -1190,7 +1190,6 @@ struct sql { /* Debug print info about SQL query as it parsed */ #define PARSER_TRACE_FLAG 0x00000002 #define SQL_FullColNames 0x00000004 /* Show full column names on SELECT */ -#define SQL_ShortColNames 0x00000040 /* Show short columns names */ #define SQL_SqlTrace 0x00000200 /* Debug print SQL as it executes */ #define SQL_SelectTrace 0x00000800 /* Debug info about select statement */ #define SQL_WhereTrace 0x00008000 /* Debug info about optimizer's work */ diff --git a/test/sql-tap/colname.test.lua b/test/sql-tap/colname.test.lua index 253497c..de03d7c 100755 --- a/test/sql-tap/colname.test.lua +++ b/test/sql-tap/colname.test.lua @@ -1,6 +1,6 @@ #!/usr/bin/env tarantool test = require("sqltester") -test:plan(63) +test:plan(62) --!./tcltestrunner.lua -- 2008 July 15 @@ -28,16 +28,12 @@ test:plan(63) -- (2) A non-trival expression (not a table column name) then the name is -- a copy of the expression text. -- --- (3) If short_column_names=ON, then just the abbreviated column name without +-- (3) If full_column_names=OFF, then just the abbreviated column name without -- the table name. -- --- (4) When short_column_names=OFF and full_column_names=OFF then --- use case (2) for simple queries and case (5) for joins. +-- (4) When full_column_names=ON then use the form: TABLE.COLUMN -- --- (5) When short_column_names=OFF and full_column_names=ON then --- use the form: TABLE.COLUMN --- --- Verify the default settings for short_column_name and full_column_name +-- Verify the default settings for full_column_name -- local function lreplace(arr, pos, len, val) for i = pos + 1, pos + len + 1, 1 do @@ -49,16 +45,6 @@ end test:do_test( "colname-1.1", function() - return test:execsql "PRAGMA short_column_names" - end, { - -- - 1 - -- - }) - -test:do_test( - "colname-1.2", - function() return test:execsql "PRAGMA full_column_names" end, { -- @@ -172,12 +158,11 @@ test:do_execsql2_test( -- }) --- Tests for short=OFF and full=OFF +-- Tests for full=OFF test:do_test( "colname-3.1", function() test:execsql [[ - PRAGMA short_column_names='OFF'; PRAGMA full_column_names='OFF'; CREATE VIEW v3 AS SELECT tabC.a, txyZ.x, * FROM tabc, txyz ORDER BY 1 LIMIT 1; @@ -199,7 +184,7 @@ test:do_execsql2_test( SELECT Tabc.a, tAbc.b, taBc.c FROM tabc ]], { -- - "Tabc.a", 1, "tAbc.b", 2, "taBc.c", 3 + "A", 1, "B", 2, "C", 3 -- }) @@ -209,7 +194,7 @@ test:do_execsql2_test( SELECT +tabc.a, -tabc.b, tabc.c FROM tabc ]], { -- - "+tabc.a", 1, "-tabc.b", -2, "tabc.c", 3 + "+tabc.a", 1, "-tabc.b", -2, "C", 3 -- }) @@ -229,7 +214,7 @@ test:do_execsql2_test( SELECT Tabc.a, Txyz.x, * FROM tabc, txyz; ]], { -- - "Tabc.a", 1, "Txyz.x", 4, "A", 1, "B", 2, "C", 3, "X", 4, "Y", 5, "Z", 6 + "A", 1, "X", 4, "A", 1, "B", 2, "C", 3, "X", 4, "Y", 5, "Z", 6 -- }) @@ -259,7 +244,7 @@ test:do_execsql2_test( SELECT v1.a, * FROM v1 ORDER BY 2; ]], { -- - "v1.a",1,"A",1,"X",4,"A_1",1,"B",2,"C",3,"X_1",4,"Y",5,"Z",6 + "A",1,"A",1,"X",4,"A_1",1,"B",2,"C",3,"X_1",4,"Y",5,"Z",6 -- }) @@ -293,12 +278,11 @@ test:do_execsql2_test( -- }) --- Test for short=OFF and full=ON +-- Test for full=ON test:do_test( "colname-4.1", function() test:execsql [[ - PRAGMA short_column_names='OFF'; PRAGMA full_column_names='ON'; CREATE VIEW v5 AS SELECT tabC.a, txyZ.x, * FROM tabc, txyz ORDER BY 1 LIMIT 1; @@ -456,7 +440,6 @@ test:do_test( -- instead of reconnect to database -- we are just turning settings to default state test:execsql([[ - PRAGMA short_column_names='ON'; PRAGMA full_column_names='OFF'; ]]) test:execsql [=[ diff --git a/test/sql-tap/select1.test.lua b/test/sql-tap/select1.test.lua index 13b5390..7029d27 100755 --- a/test/sql-tap/select1.test.lua +++ b/test/sql-tap/select1.test.lua @@ -940,7 +940,7 @@ test:do_catchsql2_test( SELECT * FROM test1 WHERE f1==11 ]], { -- - 0, {"F1", 11, "F2", 22} + 0, {"TEST1.F1", 11, "TEST1.F2", 22} -- }) @@ -956,7 +956,7 @@ test:do_test( return table.insert(v,msg) or v end, { -- - 0, {"F1", 11, "F2", 22} + 0, {"TEST1.F1", 11, "TEST1.F2", 22} -- }) @@ -1124,7 +1124,6 @@ test:do_test( "select1-6.9.3", function() test:execsql [[ - PRAGMA short_column_names='OFF'; PRAGMA full_column_names='OFF'; ]] return test:execsql2 [[ @@ -1132,7 +1131,7 @@ test:do_test( ]] end, { -- - "test1 . f1", 11, "test1 . f2", 22 + "F1", 11, "F2", 22 -- }) @@ -1140,7 +1139,6 @@ test:do_test( "select1-6.9.4", function() test:execsql [[ - PRAGMA short_column_names='OFF'; PRAGMA full_column_names='ON'; ]] return test:execsql2 [[ @@ -1156,7 +1154,6 @@ test:do_test( "select1-6.9.5", function() test:execsql [[ - PRAGMA short_column_names='OFF'; PRAGMA full_column_names='ON'; ]] return test:execsql2 [[ @@ -1238,7 +1235,6 @@ test:do_test( "select1-6.9.11", function() test:execsql [[ - PRAGMA short_column_names='ON'; PRAGMA full_column_names='ON'; ]] return test:execsql2 [[ @@ -1264,7 +1260,6 @@ test:do_test( "select1-6.9.13", function() test:execsql [[ - PRAGMA short_column_names='ON'; PRAGMA full_column_names='OFF'; ]] return test:execsql2 [[ @@ -1290,7 +1285,6 @@ test:do_test( "select1-6.9.15", function() test:execsql [[ - PRAGMA short_column_names='OFF'; PRAGMA full_column_names='ON'; ]] return test:execsql2 [[ @@ -1313,7 +1307,6 @@ test:do_execsql2_test( }) test:execsql [[ - PRAGMA short_column_names='ON'; PRAGMA full_column_names='OFF'; ]] test:do_catchsql2_test( diff --git a/test/sql/sql-debug.result b/test/sql/sql-debug.result index cb59768..ce87f11 100644 --- a/test/sql/sql-debug.result +++ b/test/sql/sql-debug.result @@ -45,7 +45,6 @@ box.execute('PRAGMA') - ['recursive_triggers', 1] - ['reverse_unordered_selects', 0] - ['select_trace', 0] - - ['short_column_names', 1] - ['sql_trace', 0] - ['vdbe_addoptrace', 0] - ['vdbe_debug', 0] -- 2.7.4