[tarantool-patches] [PATCH] sql: correct confusing message

N.Tatunov hollow653 at gmail.com
Tue Mar 27 19:02:08 MSK 2018


From: Hollow <hollow653 at gmail.com>

Required to fix the following message:

"- error: expressions prohibited in PRIMARY KEY and UNIQUE constraints"

Currently this message appears even when user tries to CREATE
non-unique functional index which isn't concerned with the
following error message. Thus far the message was corrected
to the proper one.

Closes #3236
---

Branch: https://github.com/tarantool/tarantool
Issue: https://github.com/tarantool/tarantool/issues/3236

 src/box/sql/build.c                    |  8 +++----
 test/sql-tap/colname.test.lua          |  4 ++--
 test/sql/message-func-indexes.result   | 41 ++++++++++++++++++++++++++++++++++
 test/sql/message-func-indexes.test.lua | 18 +++++++++++++++
 4 files changed, 65 insertions(+), 6 deletions(-)
 create mode 100644 test/sql/message-func-indexes.result
 create mode 100644 test/sql/message-func-indexes.test.lua

diff --git a/src/box/sql/build.c b/src/box/sql/build.c
index dd0f45c..c7f6b3c 100644
--- a/src/box/sql/build.c
+++ b/src/box/sql/build.c
@@ -1802,7 +1802,7 @@ emitNewSysSpaceSequenceRecord(Parse *pParse, int space_id, const char reg_seq_id
 
 	/* 1. Space id  */
 	sqlite3VdbeAddOp2(v, OP_SCopy, space_id, first_col + 1);
-	
+    
 	/* 2. Sequence id  */
 	sqlite3VdbeAddOp2(v, OP_IntCopy, reg_seq_id, first_col + 2);
 
@@ -2015,7 +2015,7 @@ sqlite3EndTable(Parse * pParse,	/* Parse context */
 
 			sqlite3OpenTable(pParse, iCursor, sys_space_sequence,
 					 OP_OpenWrite);
-			
+            
 			reg_space_seq_record = emitNewSysSpaceSequenceRecord(
 				pParse,
 				iSpaceId,
@@ -3065,8 +3065,8 @@ sqlite3CreateIndex(Parse * pParse,	/* All information about this parse */
 		pCExpr = sqlite3ExprSkipCollate(pListItem->pExpr);
 		if (pCExpr->op != TK_COLUMN) {
 			sqlite3ErrorMsg(pParse,
-					"expressions prohibited in PRIMARY KEY and "
-					"UNIQUE constraints");
+					"functional indexes aren't supported "
+					"in the current version");
 			goto exit_create_index;
 		} else {
 			j = pCExpr->iColumn;
diff --git a/test/sql-tap/colname.test.lua b/test/sql-tap/colname.test.lua
index 71010da..c96623e 100755
--- a/test/sql-tap/colname.test.lua
+++ b/test/sql-tap/colname.test.lua
@@ -643,13 +643,13 @@ test:do_catchsql_test(
     "colname-11.2",
     [[CREATE TABLE t1(a, b, c, d, e, 
       PRIMARY KEY(a), UNIQUE('b' COLLATE "unicode_ci" DESC));]],
-    {1, "/expressions prohibited in PRIMARY KEY/"})
+    {1, "/functional indexes aren't supported in the current version/"})
 
 test:execsql("create table table1(a primary key, b, c)")
 
 test:do_catchsql_test(
     "colname-11.3",
     [[ CREATE INDEX t1c ON table1('c'); ]],
-    {1, "/expressions prohibited in PRIMARY KEY/"})
+    {1, "/functional indexes aren't supported in the current version/"})
 
 test:finish_test()
diff --git a/test/sql/message-func-indexes.result b/test/sql/message-func-indexes.result
new file mode 100644
index 0000000..797cf28
--- /dev/null
+++ b/test/sql/message-func-indexes.result
@@ -0,0 +1,41 @@
+test_run = require('test_run').new()
+---
+...
+-- Creating tables.
+box.sql.execute("CREATE TABLE t1(id INTEGER PRIMARY KEY, a INTEGER)")
+---
+...
+box.sql.execute("CREATE TABLE t2(object INTEGER PRIMARY KEY, price INTEGER, count INTEGER)")
+---
+...
+-- Expressions that're supposed to create functional indexes
+-- should return certain message.
+box.sql.execute("CREATE INDEX i1 ON t1(a+1)")
+---
+- error: functional indexes aren't supported in the current version
+...
+box.sql.execute("CREATE INDEX i2 ON t1(a)")
+---
+...
+box.sql.execute("CREATE INDEX i3 ON t2(price + 100)")
+---
+- error: functional indexes aren't supported in the current version
+...
+box.sql.execute("CREATE INDEX i4 ON t2(price)")
+---
+...
+box.sql.execute("CREATE INDEX i5 ON t2(count + 1)")
+---
+- error: functional indexes aren't supported in the current version
+...
+box.sql.execute("CREATE INDEX i6 ON t2(count * price)")
+---
+- error: functional indexes aren't supported in the current version
+...
+-- Cleaning up.
+box.sql.execute("DROP TABLE t1")
+---
+...
+box.sql.execute("DROP TABLE t2") 
+---
+...
diff --git a/test/sql/message-func-indexes.test.lua b/test/sql/message-func-indexes.test.lua
new file mode 100644
index 0000000..fac715b
--- /dev/null
+++ b/test/sql/message-func-indexes.test.lua
@@ -0,0 +1,18 @@
+test_run = require('test_run').new()
+
+-- Creating tables.
+box.sql.execute("CREATE TABLE t1(id INTEGER PRIMARY KEY, a INTEGER)")
+box.sql.execute("CREATE TABLE t2(object INTEGER PRIMARY KEY, price INTEGER, count INTEGER)")
+
+-- Expressions that're supposed to create functional indexes
+-- should return certain message.
+box.sql.execute("CREATE INDEX i1 ON t1(a+1)")
+box.sql.execute("CREATE INDEX i2 ON t1(a)")
+box.sql.execute("CREATE INDEX i3 ON t2(price + 100)")
+box.sql.execute("CREATE INDEX i4 ON t2(price)")
+box.sql.execute("CREATE INDEX i5 ON t2(count + 1)")
+box.sql.execute("CREATE INDEX i6 ON t2(count * price)")
+
+-- Cleaning up.
+box.sql.execute("DROP TABLE t1")
+box.sql.execute("DROP TABLE t2") 
-- 
2.7.4





More information about the Tarantool-patches mailing list