Tarantool development patches archive
 help / color / mirror / Atom feed
From: Nikita Pettik <korablev@tarantool.org>
To: tarantool-patches@freelists.org
Cc: v.shpilevoy@tarantool.org, Nikita Pettik <korablev@tarantool.org>
Subject: [tarantool-patches] [PATCH 2/4] sql: remove support of CHAR type from parser
Date: Thu,  7 Mar 2019 16:14:02 +0300	[thread overview]
Message-ID: <f9ff68e0f8318f8949df0d44a823b4d1325be539.1551964360.git.korablev@tarantool.org> (raw)
In-Reply-To: <cover.1551964360.git.korablev@tarantool.org>
In-Reply-To: <cover.1551964360.git.korablev@tarantool.org>

Since now no checks connected with length of string are performed, it
might be misleading to allow specifying this type. Instead, users must
rely on VARCHAR type.

Part of #4019
---
 src/box/sql/parse.y              | 10 +---------
 test/sql-tap/autoinc.test.lua    |  2 +-
 test/sql-tap/collation.test.lua  |  2 +-
 test/sql-tap/eqp.test.lua        |  4 ++--
 test/sql-tap/fkey1.test.lua      |  4 ++--
 test/sql-tap/resolver01.test.lua |  4 ++--
 test/sql-tap/select6.test.lua    |  6 +++---
 test/sql-tap/table.test.lua      |  6 +++---
 test/sql-tap/where2.test.lua     |  4 ++--
 test/sql/collation.result        | 10 +++++-----
 test/sql/collation.test.lua      | 10 +++++-----
 test/sql/row-count.result        |  4 ++--
 test/sql/row-count.test.lua      |  4 ++--
 13 files changed, 31 insertions(+), 39 deletions(-)

diff --git a/src/box/sql/parse.y b/src/box/sql/parse.y
index fb3639f3f..92788ceb8 100644
--- a/src/box/sql/parse.y
+++ b/src/box/sql/parse.y
@@ -1487,21 +1487,13 @@ typedef(A) ::= BLOB_KW . { A.type = FIELD_TYPE_SCALAR; }
  typedef(A) ::= DATETIME . { A.type = FIELD_TYPE_NUMBER; }
 */
 
-%type char_len {int}
-typedef(A) ::= CHAR . {
-  A.type = FIELD_TYPE_STRING;
-}
 
 char_len(A) ::= LP INTEGER(B) RP . {
   (void) A;
   (void) B;
 }
 
-typedef(A) ::= CHAR char_len(B) . {
-  A.type = FIELD_TYPE_STRING;
-  (void) B;
-}
-
+%type char_len {int}
 typedef(A) ::= VARCHAR char_len(B) . {
   A.type = FIELD_TYPE_STRING;
   (void) B;
diff --git a/test/sql-tap/autoinc.test.lua b/test/sql-tap/autoinc.test.lua
index 5ec9fd632..dc2f60e15 100755
--- a/test/sql-tap/autoinc.test.lua
+++ b/test/sql-tap/autoinc.test.lua
@@ -805,7 +805,7 @@ test:do_test(
 test:do_catchsql_test(
     "autoinc-gh-3670",
     [[
-        CREATE TABLE t1 (s1 INT PRIMARY KEY AUTOINCREMENT, s2 CHAR(10));
+        CREATE TABLE t1 (s1 INT PRIMARY KEY AUTOINCREMENT, s2 VARCHAR(10));
         INSERT INTO t1 VALUES (1, 'a');
         INSERT INTO t1 SELECT s2, s2 FROM t1;
     ]], {
diff --git a/test/sql-tap/collation.test.lua b/test/sql-tap/collation.test.lua
index 1e55b0092..094d02c42 100755
--- a/test/sql-tap/collation.test.lua
+++ b/test/sql-tap/collation.test.lua
@@ -209,7 +209,7 @@ local like_testcases =
 {
     {"2.0",
     [[
-        CREATE TABLE tx1 (s1 CHAR(5) PRIMARY KEY);
+        CREATE TABLE tx1 (s1 VARCHAR(5) PRIMARY KEY);
         CREATE INDEX I1 on tx1(s1 collate "unicode_ci");
         INSERT INTO tx1 VALUES('aaa');
         INSERT INTO tx1 VALUES('Aab');
diff --git a/test/sql-tap/eqp.test.lua b/test/sql-tap/eqp.test.lua
index 5ef9999d8..2aa2d9675 100755
--- a/test/sql-tap/eqp.test.lua
+++ b/test/sql-tap/eqp.test.lua
@@ -727,8 +727,8 @@ test:drop_all_tables()
 test:do_execsql_test(
     7.0,
     [[
-        CREATE TABLE t1(idt1  INT primary key, a INT, b INT, ex CHAR(100));
-        CREATE TABLE t2(idt2  INT primary key, a INT, b INT, ex CHAR(100));
+        CREATE TABLE t1(idt1  INT primary key, a INT, b INT, ex VARCHAR(100));
+        CREATE TABLE t2(idt2  INT primary key, a INT, b INT, ex VARCHAR(100));
         CREATE INDEX i1 ON t2(a);
     ]])
 
diff --git a/test/sql-tap/fkey1.test.lua b/test/sql-tap/fkey1.test.lua
index 557e557a5..0464f2dcc 100755
--- a/test/sql-tap/fkey1.test.lua
+++ b/test/sql-tap/fkey1.test.lua
@@ -241,9 +241,9 @@ test:do_select_tests(
         {"0",
             [[
                 CREATE TABLE T12 (A INTEGER PRIMARY KEY,
-                    B CHAR(5) UNIQUE);
+                    B VARCHAR(5) UNIQUE);
                 CREATE TABLE T13 (A INTEGER PRIMARY KEY,
-                    B CHAR(5) UNIQUE,
+                    B VARCHAR(5) UNIQUE,
                     FOREIGN KEY (B) REFERENCES T12 (B) ON UPDATE SET NULL);
                 INSERT INTO T12 VALUES (1,'a');
                 INSERT INTO T13 VALUES (1,'a');
diff --git a/test/sql-tap/resolver01.test.lua b/test/sql-tap/resolver01.test.lua
index d40e49982..aa383b34b 100755
--- a/test/sql-tap/resolver01.test.lua
+++ b/test/sql-tap/resolver01.test.lua
@@ -229,7 +229,7 @@ test:do_test(
     "resolver01-4.1",
     function ()
         test:execsql([[
-            CREATE TABLE t4(m CHAR(2) primary key);
+            CREATE TABLE t4(m VARCHAR(2) primary key);
             INSERT INTO t4 VALUES('az');
             INSERT INTO t4 VALUES('by');
             INSERT INTO t4 VALUES('cx');
@@ -257,7 +257,7 @@ test:do_test(
 test:do_execsql_test(
     "resolver01-5.1",
     [[
-        CREATE TABLE t5(m CHAR(2) primary key);
+        CREATE TABLE t5(m VARCHAR(2) primary key);
         INSERT INTO t5 VALUES('ax');
         INSERT INTO t5 VALUES('bx');
         INSERT INTO t5 VALUES('cy');
diff --git a/test/sql-tap/select6.test.lua b/test/sql-tap/select6.test.lua
index 49652a5a4..7f6cc7939 100755
--- a/test/sql-tap/select6.test.lua
+++ b/test/sql-tap/select6.test.lua
@@ -1059,8 +1059,8 @@ test:do_execsql_test(
     [[
         DROP TABLE t1;
         DROP TABLE t2;
-        CREATE TABLE t1 (s1 INT PRIMARY KEY, u CHAR UNIQUE);
-        CREATE TABLE t2 (s1 INT PRIMARY KEY, u CHAR);
+        CREATE TABLE t1 (s1 INT PRIMARY KEY, u VARCHAR(1) UNIQUE);
+        CREATE TABLE t2 (s1 INT PRIMARY KEY, u VARCHAR(1));
         INSERT INTO t1 VALUES (1,'');
         INSERT INTO t2 VALUES (1,'');
         SELECT COUNT(*) FROM t1 WHERE u IN
@@ -1075,7 +1075,7 @@ test:do_execsql_test(
     12.2,
     [[
         DROP TABLE t1;
-        CREATE TABLE t1 (s1 INT PRIMARY KEY, u CHAR);
+        CREATE TABLE t1 (s1 INT PRIMARY KEY, u VARCHAR(1));
         INSERT INTO t1 VALUES (1,'');
         SELECT COUNT(*) FROM t1 WHERE u IN
                 (SELECT u FROM t2 WHERE u IN (SELECT u FROM t1));
diff --git a/test/sql-tap/table.test.lua b/test/sql-tap/table.test.lua
index b1ea27878..9c4048d4c 100755
--- a/test/sql-tap/table.test.lua
+++ b/test/sql-tap/table.test.lua
@@ -228,7 +228,7 @@ test:do_test(
 --
 local big_table = [[CREATE TABLE big(
   f1 varchar(20),
-  f2 char(10),
+  f2 varchar(10),
   f3 varchar(30) primary key,
   f4 text,
   f5 text,
@@ -893,7 +893,7 @@ test:do_execsql_test(
         CREATE TABLE t7(
            a integer primary key,
            b numeric(5,10),
-           c char(8),
+           c VARCHAR(8),
            d VARCHAR(9),
            e blob,
            f BLOB,
@@ -1405,7 +1405,7 @@ test:do_execsql_test(
     [[
         CREATE TABLE T23(
            id INT PRIMARY KEY,
-           u CHAR
+           u VARCHAR(1)
         );
     ]], {
         -- <table-23.2>
diff --git a/test/sql-tap/where2.test.lua b/test/sql-tap/where2.test.lua
index 2dd8b84c4..8eaf4053d 100755
--- a/test/sql-tap/where2.test.lua
+++ b/test/sql-tap/where2.test.lua
@@ -631,7 +631,7 @@ test:do_test(
         "where2-6.7",
         function()
             test:execsql [[
-                CREATE TABLE t2249a(a TEXT PRIMARY KEY, x CHAR(100));
+                CREATE TABLE t2249a(a TEXT PRIMARY KEY, x VARCHAR(100));
                 CREATE TABLE t2249b(b INTEGER PRIMARY KEY);
                 INSERT INTO t2249a(a) VALUES('0123');
                 INSERT INTO t2249b VALUES(123);
@@ -1273,7 +1273,7 @@ test:do_execsql_test(
         "where2-12.1",
         function ()
             local data = test:execsql([[
-                CREATE TABLE t12(x INTEGER PRIMARY KEY, y INT, z CHAR(100));
+                CREATE TABLE t12(x INTEGER PRIMARY KEY, y INT, z VARCHAR(100));
                 CREATE INDEX t12y ON t12(y);
                 EXPLAIN QUERY PLAN
                   SELECT a.x, b.x
diff --git a/test/sql/collation.result b/test/sql/collation.result
index daea35543..7e5b60d9a 100644
--- a/test/sql/collation.result
+++ b/test/sql/collation.result
@@ -34,7 +34,7 @@ box.sql.execute("SELECT 1 LIMIT 1 COLLATE BINARY, 1;")
 ...
 -- gh-3052: upper/lower support only default locale
 -- For tr-TR result depends on collation
-box.sql.execute([[CREATE TABLE tu (descriptor CHAR(50) PRIMARY KEY, letter CHAR(50))]]);
+box.sql.execute([[CREATE TABLE tu (descriptor VARCHAR(50) PRIMARY KEY, letter VARCHAR(50))]]);
 ---
 ...
 box.internal.collation.create('TURKISH', 'ICU', 'tr-TR', {strength='primary'});
@@ -263,10 +263,10 @@ box.schema.user.drop('tmp')
 ...
 -- gh-3644 Foreign key update fails with "unicode_ci".
 -- Check that foreign key update doesn't fail with "unicode_ci".
-box.sql.execute('CREATE TABLE t0 (s1 CHAR(5) COLLATE "unicode_ci" UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
+box.sql.execute('CREATE TABLE t0 (s1 VARCHAR(5) COLLATE "unicode_ci" UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
 ---
 ...
-box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 CHAR(5) COLLATE "unicode_ci" REFERENCES t0(s1));')
+box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 VARCHAR(5) COLLATE "unicode_ci" REFERENCES t0(s1));')
 ---
 ...
 box.sql.execute("INSERT INTO t0(s1) VALUES ('a');")
@@ -294,10 +294,10 @@ box.sql.execute("DROP TABLE t0;")
 ---
 ...
 -- Check that foreign key update fails with default collation.
-box.sql.execute('CREATE TABLE t0 (s1 CHAR(5) UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
+box.sql.execute('CREATE TABLE t0 (s1 VARCHAR(5) UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
 ---
 ...
-box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 CHAR(5) REFERENCES t0(s1));')
+box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 VARCHAR(5) REFERENCES t0(s1));')
 ---
 ...
 box.sql.execute("INSERT INTO t0(s1) VALUES ('a');")
diff --git a/test/sql/collation.test.lua b/test/sql/collation.test.lua
index 713a9bd89..2e55de2cb 100644
--- a/test/sql/collation.test.lua
+++ b/test/sql/collation.test.lua
@@ -14,7 +14,7 @@ box.sql.execute("SELECT 1 LIMIT 1 COLLATE BINARY, 1;")
 
 -- gh-3052: upper/lower support only default locale
 -- For tr-TR result depends on collation
-box.sql.execute([[CREATE TABLE tu (descriptor CHAR(50) PRIMARY KEY, letter CHAR(50))]]);
+box.sql.execute([[CREATE TABLE tu (descriptor VARCHAR(50) PRIMARY KEY, letter VARCHAR(50))]]);
 box.internal.collation.create('TURKISH', 'ICU', 'tr-TR', {strength='primary'});
 box.sql.execute([[INSERT INTO tu VALUES ('Latin Capital Letter I U+0049','I');]])
 box.sql.execute([[INSERT INTO tu VALUES ('Latin Small Letter I U+0069','i');]])
@@ -105,8 +105,8 @@ box.schema.user.drop('tmp')
 
 -- gh-3644 Foreign key update fails with "unicode_ci".
 -- Check that foreign key update doesn't fail with "unicode_ci".
-box.sql.execute('CREATE TABLE t0 (s1 CHAR(5) COLLATE "unicode_ci" UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
-box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 CHAR(5) COLLATE "unicode_ci" REFERENCES t0(s1));')
+box.sql.execute('CREATE TABLE t0 (s1 VARCHAR(5) COLLATE "unicode_ci" UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
+box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 VARCHAR(5) COLLATE "unicode_ci" REFERENCES t0(s1));')
 box.sql.execute("INSERT INTO t0(s1) VALUES ('a');")
 box.sql.execute("INSERT INTO t1 VALUES (1,'a');")
 -- Should't fail.
@@ -116,8 +116,8 @@ box.sql.execute("SELECT * FROM t1;")
 box.sql.execute("DROP TABLE t1;")
 box.sql.execute("DROP TABLE t0;")
 -- Check that foreign key update fails with default collation.
-box.sql.execute('CREATE TABLE t0 (s1 CHAR(5) UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
-box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 CHAR(5) REFERENCES t0(s1));')
+box.sql.execute('CREATE TABLE t0 (s1 VARCHAR(5) UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
+box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 VARCHAR(5) REFERENCES t0(s1));')
 box.sql.execute("INSERT INTO t0(s1) VALUES ('a');")
 box.sql.execute("INSERT INTO t1 VALUES (1,'a');")
 -- Should fail.
diff --git a/test/sql/row-count.result b/test/sql/row-count.result
index d6248eb0f..b75298f72 100644
--- a/test/sql/row-count.result
+++ b/test/sql/row-count.result
@@ -9,7 +9,7 @@ box.sql.execute('pragma sql_default_engine=\''..engine..'\'')
 ...
 -- Test cases concerning row count calculations.
 --
-box.sql.execute("CREATE TABLE t1 (s1 CHAR(10) PRIMARY KEY);")
+box.sql.execute("CREATE TABLE t1 (s1 VARCHAR(10) PRIMARY KEY);")
 ---
 ...
 box.sql.execute("SELECT ROW_COUNT();")
@@ -20,7 +20,7 @@ box.sql.execute("SELECT ROW_COUNT();")
 ---
 - - [0]
 ...
-box.sql.execute("CREATE TABLE t2 (s1 CHAR(10) PRIMARY KEY, s2 CHAR(10) REFERENCES t1 ON DELETE CASCADE);")
+box.sql.execute("CREATE TABLE t2 (s1 VARCHAR(10) PRIMARY KEY, s2 VARCHAR(10) REFERENCES t1 ON DELETE CASCADE);")
 ---
 ...
 box.sql.execute("SELECT ROW_COUNT();")
diff --git a/test/sql/row-count.test.lua b/test/sql/row-count.test.lua
index f10807fff..89476c7a9 100644
--- a/test/sql/row-count.test.lua
+++ b/test/sql/row-count.test.lua
@@ -4,10 +4,10 @@ box.sql.execute('pragma sql_default_engine=\''..engine..'\'')
 
 -- Test cases concerning row count calculations.
 --
-box.sql.execute("CREATE TABLE t1 (s1 CHAR(10) PRIMARY KEY);")
+box.sql.execute("CREATE TABLE t1 (s1 VARCHAR(10) PRIMARY KEY);")
 box.sql.execute("SELECT ROW_COUNT();")
 box.sql.execute("SELECT ROW_COUNT();")
-box.sql.execute("CREATE TABLE t2 (s1 CHAR(10) PRIMARY KEY, s2 CHAR(10) REFERENCES t1 ON DELETE CASCADE);")
+box.sql.execute("CREATE TABLE t2 (s1 VARCHAR(10) PRIMARY KEY, s2 VARCHAR(10) REFERENCES t1 ON DELETE CASCADE);")
 box.sql.execute("SELECT ROW_COUNT();")
 box.sql.execute("CREATE TABLE t3 (i1 INT UNIQUE, i2 INT, i3 INT PRIMARY KEY);")
 box.sql.execute("INSERT INTO t3 VALUES (0, 0, 0);")
-- 
2.15.1

  parent reply	other threads:[~2019-03-07 13:14 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-07 13:14 [tarantool-patches] [PATCH 0/4] SQL types changes Nikita Pettik
2019-03-07 13:14 ` [tarantool-patches] [PATCH 1/4] sql: remove support of DATE/TIME from parser Nikita Pettik
2019-03-07 13:34   ` [tarantool-patches] " Konstantin Osipov
2019-03-07 13:14 ` Nikita Pettik [this message]
2019-03-07 13:35   ` [tarantool-patches] Re: [PATCH 2/4] sql: remove support of CHAR type " Konstantin Osipov
2019-03-07 13:14 ` [tarantool-patches] [PATCH 3/4] sql: remove support of NUMERIC " Nikita Pettik
2019-03-07 13:36   ` [tarantool-patches] " Konstantin Osipov
2019-03-07 13:14 ` [tarantool-patches] [PATCH 4/4] sql: replace BLOB as column type with SCALAR Nikita Pettik
2019-03-07 13:40   ` [tarantool-patches] " Konstantin Osipov
2019-03-07 14:00     ` n.pettik
2019-03-07 14:14 ` [tarantool-patches] Re: [PATCH 0/4] SQL types changes Kirill Yukhin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f9ff68e0f8318f8949df0d44a823b4d1325be539.1551964360.git.korablev@tarantool.org \
    --to=korablev@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --cc=v.shpilevoy@tarantool.org \
    --subject='Re: [tarantool-patches] [PATCH 2/4] sql: remove support of CHAR type from parser' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox