[Tarantool-patches] [PATCH v2 2/9] sql: remove PRAGMA "short_column_names"
imeevma at tarantool.org
imeevma at tarantool.org
Mon Dec 30 19:43:08 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 | 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 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 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, {
- -- <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 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
]], {
-- <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 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
More information about the Tarantool-patches
mailing list