Skip to content

Commit 46168bf

Browse files
Korablev77kyukhin
authored andcommitted
sql: remove support of CHAR type from parser
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
1 parent 3caeb33 commit 46168bf

14 files changed

+62
-70
lines changed

src/box/sql/parse.y

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1487,21 +1487,13 @@ typedef(A) ::= BLOB_KW . { A.type = FIELD_TYPE_SCALAR; }
14871487
typedef(A) ::= DATETIME . { A.type = FIELD_TYPE_NUMBER; }
14881488
*/
14891489

1490-
%type char_len {int}
1491-
typedef(A) ::= CHAR . {
1492-
A.type = FIELD_TYPE_STRING;
1493-
}
14941490

14951491
char_len(A) ::= LP INTEGER(B) RP . {
14961492
(void) A;
14971493
(void) B;
14981494
}
14991495

1500-
typedef(A) ::= CHAR char_len(B) . {
1501-
A.type = FIELD_TYPE_STRING;
1502-
(void) B;
1503-
}
1504-
1496+
%type char_len {int}
15051497
typedef(A) ::= VARCHAR char_len(B) . {
15061498
A.type = FIELD_TYPE_STRING;
15071499
(void) B;

test/sql-tap/autoinc.test.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -805,7 +805,7 @@ test:do_test(
805805
test:do_catchsql_test(
806806
"autoinc-gh-3670",
807807
[[
808-
CREATE TABLE t1 (s1 INT PRIMARY KEY AUTOINCREMENT, s2 CHAR(10));
808+
CREATE TABLE t1 (s1 INT PRIMARY KEY AUTOINCREMENT, s2 VARCHAR(10));
809809
INSERT INTO t1 VALUES (1, 'a');
810810
INSERT INTO t1 SELECT s2, s2 FROM t1;
811811
]], {

test/sql-tap/collation.test.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ local like_testcases =
209209
{
210210
{"2.0",
211211
[[
212-
CREATE TABLE tx1 (s1 CHAR(5) PRIMARY KEY);
212+
CREATE TABLE tx1 (s1 VARCHAR(5) PRIMARY KEY);
213213
CREATE INDEX I1 on tx1(s1 collate "unicode_ci");
214214
INSERT INTO tx1 VALUES('aaa');
215215
INSERT INTO tx1 VALUES('Aab');

test/sql-tap/eqp.test.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -727,8 +727,8 @@ test:drop_all_tables()
727727
test:do_execsql_test(
728728
7.0,
729729
[[
730-
CREATE TABLE t1(idt1 INT primary key, a INT, b INT, ex CHAR(100));
731-
CREATE TABLE t2(idt2 INT primary key, a INT, b INT, ex CHAR(100));
730+
CREATE TABLE t1(idt1 INT primary key, a INT, b INT, ex VARCHAR(100));
731+
CREATE TABLE t2(idt2 INT primary key, a INT, b INT, ex VARCHAR(100));
732732
CREATE INDEX i1 ON t2(a);
733733
]])
734734

test/sql-tap/fkey1.test.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,9 @@ test:do_select_tests(
241241
{"0",
242242
[[
243243
CREATE TABLE T12 (A INTEGER PRIMARY KEY,
244-
B CHAR(5) UNIQUE);
244+
B VARCHAR(5) UNIQUE);
245245
CREATE TABLE T13 (A INTEGER PRIMARY KEY,
246-
B CHAR(5) UNIQUE,
246+
B VARCHAR(5) UNIQUE,
247247
FOREIGN KEY (B) REFERENCES T12 (B) ON UPDATE SET NULL);
248248
INSERT INTO T12 VALUES (1,'a');
249249
INSERT INTO T13 VALUES (1,'a');

test/sql-tap/func.test.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2853,7 +2853,7 @@ test:do_execsql_test(
28532853
-- GROUP_CONCAT
28542854
test:do_execsql_test(
28552855
"func-72",
2856-
"CREATE TABLE t100(a INT PRIMARY KEY, b CHAR); \
2856+
"CREATE TABLE t100(a INT PRIMARY KEY, b VARCHAR(5)); \
28572857
INSERT INTO t100 VALUES (1, CHAR(00)); \
28582858
INSERT INTO t100 VALUES (2, CHAR(65, 00, 65)); \
28592859
INSERT INTO t100 VALUES (3, CHAR(00)); \

test/sql-tap/resolver01.test.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ test:do_test(
229229
"resolver01-4.1",
230230
function ()
231231
test:execsql([[
232-
CREATE TABLE t4(m CHAR(2) primary key);
232+
CREATE TABLE t4(m VARCHAR(2) primary key);
233233
INSERT INTO t4 VALUES('az');
234234
INSERT INTO t4 VALUES('by');
235235
INSERT INTO t4 VALUES('cx');
@@ -257,7 +257,7 @@ test:do_test(
257257
test:do_execsql_test(
258258
"resolver01-5.1",
259259
[[
260-
CREATE TABLE t5(m CHAR(2) primary key);
260+
CREATE TABLE t5(m VARCHAR(2) primary key);
261261
INSERT INTO t5 VALUES('ax');
262262
INSERT INTO t5 VALUES('bx');
263263
INSERT INTO t5 VALUES('cy');

test/sql-tap/select6.test.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,8 +1059,8 @@ test:do_execsql_test(
10591059
[[
10601060
DROP TABLE t1;
10611061
DROP TABLE t2;
1062-
CREATE TABLE t1 (s1 INT PRIMARY KEY, u CHAR UNIQUE);
1063-
CREATE TABLE t2 (s1 INT PRIMARY KEY, u CHAR);
1062+
CREATE TABLE t1 (s1 INT PRIMARY KEY, u VARCHAR(1) UNIQUE);
1063+
CREATE TABLE t2 (s1 INT PRIMARY KEY, u VARCHAR(1));
10641064
INSERT INTO t1 VALUES (1,'');
10651065
INSERT INTO t2 VALUES (1,'');
10661066
SELECT COUNT(*) FROM t1 WHERE u IN
@@ -1075,7 +1075,7 @@ test:do_execsql_test(
10751075
12.2,
10761076
[[
10771077
DROP TABLE t1;
1078-
CREATE TABLE t1 (s1 INT PRIMARY KEY, u CHAR);
1078+
CREATE TABLE t1 (s1 INT PRIMARY KEY, u VARCHAR(1));
10791079
INSERT INTO t1 VALUES (1,'');
10801080
SELECT COUNT(*) FROM t1 WHERE u IN
10811081
(SELECT u FROM t2 WHERE u IN (SELECT u FROM t1));

test/sql-tap/table.test.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ test:do_test(
228228
--
229229
local big_table = [[CREATE TABLE big(
230230
f1 varchar(20),
231-
f2 char(10),
231+
f2 varchar(10),
232232
f3 varchar(30) primary key,
233233
f4 text,
234234
f5 text,
@@ -893,7 +893,7 @@ test:do_execsql_test(
893893
CREATE TABLE t7(
894894
a integer primary key,
895895
b numeric(5,10),
896-
c char(8),
896+
c VARCHAR(8),
897897
d VARCHAR(9),
898898
e blob,
899899
f BLOB,
@@ -1405,7 +1405,7 @@ test:do_execsql_test(
14051405
[[
14061406
CREATE TABLE T23(
14071407
id INT PRIMARY KEY,
1408-
u CHAR
1408+
u VARCHAR(1)
14091409
);
14101410
]], {
14111411
-- <table-23.2>

test/sql-tap/where2.test.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ test:do_test(
631631
"where2-6.7",
632632
function()
633633
test:execsql [[
634-
CREATE TABLE t2249a(a TEXT PRIMARY KEY, x CHAR(100));
634+
CREATE TABLE t2249a(a TEXT PRIMARY KEY, x VARCHAR(100));
635635
CREATE TABLE t2249b(b INTEGER PRIMARY KEY);
636636
INSERT INTO t2249a(a) VALUES('0123');
637637
INSERT INTO t2249b VALUES(123);
@@ -1273,7 +1273,7 @@ test:do_execsql_test(
12731273
"where2-12.1",
12741274
function ()
12751275
local data = test:execsql([[
1276-
CREATE TABLE t12(x INTEGER PRIMARY KEY, y INT, z CHAR(100));
1276+
CREATE TABLE t12(x INTEGER PRIMARY KEY, y INT, z VARCHAR(100));
12771277
CREATE INDEX t12y ON t12(y);
12781278
EXPLAIN QUERY PLAN
12791279
SELECT a.x, b.x

test/sql/collation.result

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ box.sql.execute("SELECT 1 LIMIT 1 COLLATE BINARY, 1;")
3434
...
3535
-- gh-3052: upper/lower support only default locale
3636
-- For tr-TR result depends on collation
37-
box.sql.execute([[CREATE TABLE tu (descriptor CHAR(50) PRIMARY KEY, letter CHAR(50))]]);
37+
box.sql.execute([[CREATE TABLE tu (descriptor VARCHAR(50) PRIMARY KEY, letter VARCHAR(50))]]);
3838
---
3939
...
4040
box.internal.collation.create('TURKISH', 'ICU', 'tr-TR', {strength='primary'});
@@ -263,10 +263,10 @@ box.schema.user.drop('tmp')
263263
...
264264
-- gh-3644 Foreign key update fails with "unicode_ci".
265265
-- Check that foreign key update doesn't fail with "unicode_ci".
266-
box.sql.execute('CREATE TABLE t0 (s1 CHAR(5) COLLATE "unicode_ci" UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
266+
box.sql.execute('CREATE TABLE t0 (s1 VARCHAR(5) COLLATE "unicode_ci" UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
267267
---
268268
...
269-
box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 CHAR(5) COLLATE "unicode_ci" REFERENCES t0(s1));')
269+
box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 VARCHAR(5) COLLATE "unicode_ci" REFERENCES t0(s1));')
270270
---
271271
...
272272
box.sql.execute("INSERT INTO t0(s1) VALUES ('a');")
@@ -294,10 +294,10 @@ box.sql.execute("DROP TABLE t0;")
294294
---
295295
...
296296
-- Check that foreign key update fails with default collation.
297-
box.sql.execute('CREATE TABLE t0 (s1 CHAR(5) UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
297+
box.sql.execute('CREATE TABLE t0 (s1 VARCHAR(5) UNIQUE, id INT PRIMARY KEY AUTOINCREMENT);')
298298
---
299299
...
300-
box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 CHAR(5) REFERENCES t0(s1));')
300+
box.sql.execute('CREATE TABLE t1 (s1 INT PRIMARY KEY, s0 VARCHAR(5) REFERENCES t0(s1));')
301301
---
302302
...
303303
box.sql.execute("INSERT INTO t0(s1) VALUES ('a');")
@@ -429,7 +429,7 @@ box.space.T4B:drop()
429429
...
430430
-- gh-3537 Duplicate key error for an index that is not unique
431431
-- pk - default, sc - unicode_ci
432-
box.sql.execute('CREATE TABLE t3 (s1 CHAR(5) PRIMARY KEY);')
432+
box.sql.execute('CREATE TABLE t3 (s1 VARCHAR(5) PRIMARY KEY);')
433433
---
434434
...
435435
box.sql.execute('CREATE INDEX i3 ON t3 (s1 collate "unicode_ci");')
@@ -450,7 +450,7 @@ box.sql.execute("DROP TABLE t3;")
450450
---
451451
...
452452
-- pk - binary, sc - unicode
453-
box.sql.execute('CREATE TABLE t3b (s1 CHAR(5) collate "binary" PRIMARY KEY);')
453+
box.sql.execute('CREATE TABLE t3b (s1 VARCHAR(5) collate "binary" PRIMARY KEY);')
454454
---
455455
...
456456
box.sql.execute('CREATE INDEX i3b ON t3b (s1 collate "unicode");')
@@ -471,7 +471,7 @@ box.sql.execute("DROP TABLE t3b;")
471471
---
472472
...
473473
-- pk - binary, sc - unicode (make dup)
474-
box.sql.execute('CREATE TABLE t3b (s1 CHAR(5) collate "binary" PRIMARY KEY);')
474+
box.sql.execute('CREATE TABLE t3b (s1 VARCHAR(5) collate "binary" PRIMARY KEY);')
475475
---
476476
...
477477
box.sql.execute('CREATE INDEX i3b ON t3b (s1 collate "unicode");')
@@ -496,7 +496,7 @@ box.sql.execute("DROP TABLE t3b;")
496496
---
497497
...
498498
-- pk - unicode, sc - binary
499-
box.sql.execute('CREATE TABLE t3c (s1 CHAR(5) collate "unicode" PRIMARY KEY);')
499+
box.sql.execute('CREATE TABLE t3c (s1 VARCHAR(5) collate "unicode" PRIMARY KEY);')
500500
---
501501
...
502502
box.sql.execute('CREATE INDEX i3c ON t3c (s1 collate "binary");')
@@ -517,7 +517,7 @@ box.sql.execute("DROP TABLE t3c;")
517517
---
518518
...
519519
-- pk - unicode, sc - binary (make dup)
520-
box.sql.execute('CREATE TABLE t3c (s1 CHAR(5) collate "unicode" PRIMARY KEY);')
520+
box.sql.execute('CREATE TABLE t3c (s1 VARCHAR(5) collate "unicode" PRIMARY KEY);')
521521
---
522522
...
523523
box.sql.execute('CREATE INDEX i3c ON t3c (s1 collate "binary");')
@@ -542,7 +542,7 @@ box.sql.execute("DROP TABLE t3c;")
542542
---
543543
...
544544
-- pk - binary, sc - unicode_ci
545-
box.sql.execute('CREATE TABLE t3d (s1 CHAR(5) collate "binary" PRIMARY KEY);')
545+
box.sql.execute('CREATE TABLE t3d (s1 VARCHAR(5) collate "binary" PRIMARY KEY);')
546546
---
547547
...
548548
box.sql.execute('CREATE INDEX i3d ON t3d (s1 collate "unicode_ci");')
@@ -563,7 +563,7 @@ box.sql.execute("DROP TABLE t3d;")
563563
---
564564
...
565565
-- pk - binary, sc - unicode_ci (make dup)
566-
box.sql.execute('CREATE TABLE t3d (s1 CHAR(5) collate "binary" PRIMARY KEY);')
566+
box.sql.execute('CREATE TABLE t3d (s1 VARCHAR(5) collate "binary" PRIMARY KEY);')
567567
---
568568
...
569569
box.sql.execute('CREATE INDEX i3d ON t3d (s1 collate "unicode_ci");')
@@ -588,7 +588,7 @@ box.sql.execute("DROP TABLE t3d;")
588588
---
589589
...
590590
-- pk - unicode_ci, sc - binary (should fail)
591-
box.sql.execute('CREATE TABLE t3e (s1 CHAR(5) collate "unicode_ci" PRIMARY KEY);')
591+
box.sql.execute('CREATE TABLE t3e (s1 VARCHAR(5) collate "unicode_ci" PRIMARY KEY);')
592592
---
593593
...
594594
box.sql.execute('CREATE INDEX i3e ON t3e (s1 collate "binary");')
@@ -609,7 +609,7 @@ box.sql.execute("DROP TABLE t3e;")
609609
---
610610
...
611611
-- pk - unicode, sc - unicode_ci
612-
box.sql.execute('CREATE TABLE t3f (s1 CHAR(5) collate "unicode" PRIMARY KEY);')
612+
box.sql.execute('CREATE TABLE t3f (s1 VARCHAR(5) collate "unicode" PRIMARY KEY);')
613613
---
614614
...
615615
box.sql.execute('CREATE INDEX i3f ON t3f (s1 collate "unicode_ci");')
@@ -630,7 +630,7 @@ box.sql.execute("DROP TABLE t3f;")
630630
---
631631
...
632632
-- pk - unicode, sc - unicode_ci (make dup)
633-
box.sql.execute('CREATE TABLE t3f (s1 CHAR(5) collate "unicode" PRIMARY KEY);')
633+
box.sql.execute('CREATE TABLE t3f (s1 VARCHAR(5) collate "unicode" PRIMARY KEY);')
634634
---
635635
...
636636
box.sql.execute('CREATE INDEX i3f ON t3f (s1 collate "unicode_ci");')
@@ -655,7 +655,7 @@ box.sql.execute("DROP TABLE t3f;")
655655
---
656656
...
657657
-- pk - unicode_ci, sc - unicode (should fail)
658-
box.sql.execute('CREATE TABLE t3g (s1 CHAR(5) collate "unicode_ci" PRIMARY KEY);')
658+
box.sql.execute('CREATE TABLE t3g (s1 VARCHAR(5) collate "unicode_ci" PRIMARY KEY);')
659659
---
660660
...
661661
box.sql.execute('CREATE INDEX i3g ON t3g (s1 collate "unicode");')
@@ -676,7 +676,7 @@ box.sql.execute("DROP TABLE t3g;")
676676
---
677677
...
678678
-- pk - default, sc - multipart
679-
box.sql.execute('CREATE TABLE qms1 (w CHAR(5) PRIMARY KEY, n CHAR(5), q CHAR(5), s INTEGER);')
679+
box.sql.execute('CREATE TABLE qms1 (w VARCHAR(5) PRIMARY KEY, n VARCHAR(5), q VARCHAR(5), s INTEGER);')
680680
---
681681
...
682682
box.sql.execute('CREATE INDEX iqms1 ON qms1 (w collate "unicode_ci", n);')
@@ -696,7 +696,7 @@ box.sql.execute("SELECT * FROM qms1;")
696696
box.sql.execute("DROP TABLE qms1;")
697697
---
698698
...
699-
box.sql.execute('CREATE TABLE qms2 (w CHAR(5) PRIMARY KEY, n CHAR(5), q CHAR(5), s INTEGER);')
699+
box.sql.execute('CREATE TABLE qms2 (w VARCHAR(5) PRIMARY KEY, n VARCHAR(5), q VARCHAR(5), s INTEGER);')
700700
---
701701
...
702702
box.sql.execute('CREATE INDEX iqms2 ON qms2 (w collate "unicode", n);')
@@ -717,7 +717,7 @@ box.sql.execute("DROP TABLE qms2;")
717717
---
718718
...
719719
-- pk - multipart, sc overlaps with pk
720-
box.sql.execute('CREATE TABLE qms3 (w CHAR(5), n CHAR(5), q CHAR(5), s INTEGER, CONSTRAINT pk_qms3 PRIMARY KEY(w, n, q));')
720+
box.sql.execute('CREATE TABLE qms3 (w VARCHAR(5), n VARCHAR(5), q VARCHAR(5), s INTEGER, CONSTRAINT pk_qms3 PRIMARY KEY(w, n, q));')
721721
---
722722
...
723723
box.sql.execute('CREATE INDEX iqms3 ON qms3 (w collate "unicode_ci", s);')
@@ -737,7 +737,7 @@ box.sql.execute("SELECT * FROM qms3;")
737737
box.sql.execute("DROP TABLE qms3;")
738738
---
739739
...
740-
box.sql.execute('CREATE TABLE qms4 (w CHAR(5), n CHAR(5), q CHAR(5), s INTEGER, CONSTRAINT pk_qms4 PRIMARY KEY(w, n, q));')
740+
box.sql.execute('CREATE TABLE qms4 (w VARCHAR(5), n VARCHAR(5), q VARCHAR(5), s INTEGER, CONSTRAINT pk_qms4 PRIMARY KEY(w, n, q));')
741741
---
742742
...
743743
box.sql.execute('CREATE INDEX iqms4 ON qms4 (w collate "unicode", s);')

0 commit comments

Comments
 (0)