[Tarantool-patches] [PATCH 2/5] sql: remove PRAGMA "short_column_names"

imeevma at tarantool.org imeevma at tarantool.org
Wed Nov 27 13:13:30 MSK 2019


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 <table name>.<column name>.
3) If "short_column_names" = ON, then the column name is displayed
as <column name>. This is the default option.

But we need only two ways to show the column name:
1) Show the column name as <column name>. This should be the
default option.
2) Show the column name as <table name>.<column name>.

In this regard, we need only one of these pragmas.

Part of #4511
---
 src/box/sql.c                 |  3 +--
 src/box/sql/pragma.h          | 62 +++++++++++++++++++------------------------
 src/box/sql/select.c          | 16 +++--------
 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, 44 insertions(+), 89 deletions(-)

diff --git a/src/box/sql.c b/src/box/sql.c
index f1df555..7c1035c 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 511de23..f337f0b 100644
--- a/src/box/sql/pragma.h
+++ b/src/box/sql/pragma.h
@@ -111,36 +111,33 @@ 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",
 };
 
 /* Definitions of all built-in pragmas */
@@ -214,26 +211,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",
@@ -252,33 +244,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 8f93edd..b81c7af 100644
--- a/src/box/sql/select.c
+++ b/src/box/sql/select.c
@@ -1760,7 +1760,6 @@ generateColumnNames(Parse * pParse,	/* Parser context */
 	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;
@@ -1778,8 +1777,6 @@ generateColumnNames(Parse * pParse,	/* Parser context */
 	}
 	assert(pTabList != 0);
 	pParse->colNamesSet = 1;
-	fullNames = (pParse->sql_flags & SQL_FullColNames) != 0;
-	shortNames = (pParse->sql_flags & SQL_ShortColNames) != 0;
 	sqlVdbeSetNumCols(v, pEList->nExpr);
 	uint32_t var_count = 0;
 	for (i = 0; i < pEList->nExpr; i++) {
@@ -1806,12 +1803,7 @@ generateColumnNames(Parse * pParse,	/* Parser context */
 			struct space_def *space_def = pTabList->a[j].space->def;
 			assert(iCol >= 0 && iCol < (int)space_def->field_count);
 			zCol = space_def->fields[iCol].name;
-			if (!shortNames && !fullNames) {
-				sqlVdbeSetColName(v, i, COLNAME_NAME,
-						      sqlDbStrDup(db,
-								      pEList->a[i].zSpan),
-						      SQL_DYNAMIC);
-			} else if (fullNames) {
+			if ((pParse->sql_flags & SQL_FullColNames) != 0) {
 				char *zName = 0;
 				zName = sqlMPrintf(db, "%s.%s",
 						       space_def->name, zCol);
@@ -2022,8 +2014,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;
@@ -4926,8 +4917,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 b4f1d4c..27a4c41 100644
--- a/src/box/sql/sqlInt.h
+++ b/src/box/sql/sqlInt.h
@@ -1166,7 +1166,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, {
-        -- <colname-1.1>
-        1
-        -- </colname-1.1>
-    })
-
-test:do_test(
-    "colname-1.2",
-    function()
         return test:execsql "PRAGMA full_column_names"
     end, {
         -- <colname-1.2>
@@ -172,12 +158,11 @@ test:do_execsql2_test(
         -- </colname-2.9>
     })
 
--- 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
     ]], {
         -- <colname-3.2>
-        "Tabc.a", 1, "tAbc.b", 2, "taBc.c", 3
+        "A", 1, "B", 2, "C", 3
         -- </colname-3.2>
     })
 
@@ -209,7 +194,7 @@ test:do_execsql2_test(
         SELECT +tabc.a, -tabc.b, tabc.c FROM tabc
     ]], {
         -- <colname-3.3>
-        "+tabc.a", 1, "-tabc.b", -2, "tabc.c", 3
+        "+tabc.a", 1, "-tabc.b", -2, "C", 3
         -- </colname-3.3>
     })
 
@@ -229,7 +214,7 @@ test:do_execsql2_test(
         SELECT Tabc.a, Txyz.x, * FROM tabc, txyz;
     ]], {
         -- <colname-3.5>
-        "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
         -- </colname-3.5>
     })
 
@@ -259,7 +244,7 @@ test:do_execsql2_test(
         SELECT v1.a, * FROM v1 ORDER BY 2;
     ]], {
         -- <colname-3.8>
-        "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
         -- </colname-3.8>
     })
 
@@ -293,12 +278,11 @@ test:do_execsql2_test(
         -- </colname-3.11>
     })
 
--- 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 4bbfbd6..d8fe7a9 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
     ]], {
         -- <select1-6.1.3>
-        0, {"F1", 11, "F2", 22}
+        0, {"TEST1.F1", 11, "TEST1.F2", 22}
         -- </select1-6.1.3>
     })
 
@@ -956,7 +956,7 @@ test:do_test(
         return table.insert(v,msg) or v
     end, {
         -- <select1-6.1.4>
-        0, {"F1", 11, "F2", 22}
+        0, {"TEST1.F1", 11, "TEST1.F2", 22}
         -- </select1-6.1.4>
     })
 
@@ -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, {
         -- <select1-6.9.3>
-        "test1 . f1", 11, "test1 . f2", 22
+        "F1", 11, "F2", 22
         -- </select1-6.9.3>
     })
 
@@ -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 e52a13a..4102b1a 100644
--- a/test/sql/sql-debug.result
+++ b/test/sql/sql-debug.result
@@ -44,7 +44,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



More information about the Tarantool-patches mailing list