mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-17 08:34:19 +01:00
Collate: add more TCL tests
This commit is contained in:
@@ -102,3 +102,211 @@ do_execsql_test_on_specific_db {:memory:} collate_groupped_aggregation_explicit_
|
||||
select max(name collate nocase) from fruits group by category;
|
||||
} {banana
|
||||
CHERRY}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_join_nocase {
|
||||
CREATE TABLE a(s TEXT);
|
||||
CREATE TABLE b(s TEXT);
|
||||
INSERT INTO a VALUES ('A');
|
||||
INSERT INTO b VALUES ('a');
|
||||
|
||||
SELECT a.s, b.s FROM a JOIN b ON a.s COLLATE NOCASE = b.s;
|
||||
} {A|a}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_columns_where_implicit {
|
||||
CREATE TABLE t(
|
||||
a TEXT COLLATE NOCASE,
|
||||
b TEXT COLLATE BINARY,
|
||||
c TEXT COLLATE RTRIM
|
||||
);
|
||||
INSERT INTO t(a,b,c) VALUES
|
||||
('hat','hat','hat '),
|
||||
('hAt','hAt','hat'),
|
||||
('HAT','HAT','hat '),
|
||||
('other','other','other');
|
||||
|
||||
SELECT count(*) FROM t WHERE a = 'hAt';
|
||||
SELECT count(*) FROM t WHERE b = 'hAt';
|
||||
SELECT count(*) FROM t WHERE c = 'hat';
|
||||
} {3
|
||||
1
|
||||
3}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_columns_where_explicit_override {
|
||||
CREATE TABLE t(
|
||||
a TEXT COLLATE NOCASE,
|
||||
b TEXT COLLATE BINARY,
|
||||
c TEXT COLLATE RTRIM
|
||||
);
|
||||
INSERT INTO t(a,b,c) VALUES
|
||||
('hat','hat','hat '),
|
||||
('hAt','hAt','hat'),
|
||||
('HAT','HAT','hat '),
|
||||
('other','other','other');
|
||||
|
||||
SELECT count(*) FROM t WHERE a COLLATE BINARY = 'hAt'; -- override to binary
|
||||
SELECT count(*) FROM t WHERE b COLLATE NOCASE = 'hAt'; -- override to nocase
|
||||
SELECT count(*) FROM t WHERE c COLLATE BINARY = 'hat'; -- override to binary
|
||||
} {1
|
||||
3
|
||||
1}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_order_by_binary {
|
||||
CREATE TABLE words(w TEXT COLLATE BINARY);
|
||||
INSERT INTO words(w) VALUES ('Apple'), ('banana'), ('CHERRY');
|
||||
SELECT w FROM words ORDER BY w;
|
||||
} {Apple
|
||||
CHERRY
|
||||
banana}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_order_by_nocase {
|
||||
CREATE TABLE words(w TEXT COLLATE NOCASE);
|
||||
INSERT INTO words(w) VALUES ('Apple'), ('banana'), ('CHERRY');
|
||||
SELECT w FROM words ORDER BY w;
|
||||
} {Apple
|
||||
banana
|
||||
CHERRY}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_order_by_explicit_override {
|
||||
CREATE TABLE words(w TEXT COLLATE NOCASE);
|
||||
INSERT INTO words(w) VALUES ('Apple'), ('banana'), ('CHERRY');
|
||||
SELECT w FROM words ORDER BY w COLLATE BINARY;
|
||||
} {Apple
|
||||
CHERRY
|
||||
banana}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_distinct_rtrim {
|
||||
CREATE TABLE t(c TEXT COLLATE RTRIM);
|
||||
INSERT INTO t(c) VALUES ('x'), ('x '), ('x '), ('y'), ('y ');
|
||||
SELECT count(DISTINCT c) FROM t;
|
||||
} {2}
|
||||
|
||||
do_execsql_test_in_memory_any_error collate_unique_nocase_conflict {
|
||||
CREATE TABLE u(a TEXT COLLATE NOCASE UNIQUE);
|
||||
INSERT INTO u VALUES ('aa');
|
||||
INSERT INTO u VALUES ('AA');
|
||||
}
|
||||
|
||||
do_execsql_test_in_memory_any_error collate_unique_rtrim_conflict {
|
||||
CREATE TABLE r(a TEXT COLLATE RTRIM UNIQUE);
|
||||
INSERT INTO r VALUES ('bb');
|
||||
INSERT INTO r VALUES ('bb ');
|
||||
}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_unique_binary_allows_case {
|
||||
CREATE TABLE ub(a TEXT COLLATE BINARY UNIQUE);
|
||||
INSERT INTO ub VALUES ('aa');
|
||||
INSERT INTO ub VALUES ('AA');
|
||||
SELECT count(*) FROM ub;
|
||||
} {2}
|
||||
|
||||
do_execsql_test_in_memory_any_error collate_pk_rtrim_conflict {
|
||||
CREATE TABLE p(a TEXT COLLATE RTRIM PRIMARY KEY);
|
||||
INSERT INTO p VALUES ('key');
|
||||
INSERT INTO p VALUES ('key ');
|
||||
}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_join_implicit_nocase_columns {
|
||||
CREATE TABLE a(s TEXT COLLATE NOCASE);
|
||||
CREATE TABLE b(s TEXT COLLATE NOCASE);
|
||||
INSERT INTO a VALUES ('A');
|
||||
INSERT INTO b VALUES ('a');
|
||||
SELECT a.s, b.s FROM a JOIN b ON a.s = b.s;
|
||||
} {A|a}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_join_mixed_implicit_binary_left {
|
||||
CREATE TABLE a(s TEXT COLLATE BINARY);
|
||||
CREATE TABLE b(s TEXT COLLATE NOCASE);
|
||||
INSERT INTO a VALUES ('A');
|
||||
INSERT INTO b VALUES ('a');
|
||||
SELECT a.s, b.s FROM a JOIN b ON a.s = b.s;
|
||||
} {}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_join_mixed_explicit_nocase_left {
|
||||
CREATE TABLE a(s TEXT COLLATE BINARY);
|
||||
CREATE TABLE b(s TEXT COLLATE NOCASE);
|
||||
INSERT INTO a VALUES ('A');
|
||||
INSERT INTO b VALUES ('a');
|
||||
SELECT a.s, b.s FROM a JOIN b ON a.s COLLATE NOCASE = b.s;
|
||||
} {A|a}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_where_with_and_without_explicit {
|
||||
CREATE TABLE t(a TEXT COLLATE NOCASE, b TEXT COLLATE BINARY, c TEXT COLLATE RTRIM);
|
||||
INSERT INTO t VALUES ('Foo','Foo','Foo '), ('fOo','fOo','Foo'), ('other','other','other');
|
||||
-- implicit uses column collation
|
||||
SELECT count(*) FROM t WHERE a = 'foo';
|
||||
-- explicit override on binary column
|
||||
SELECT count(*) FROM t WHERE b COLLATE NOCASE = 'foo';
|
||||
-- implicit RTRIM on c
|
||||
SELECT count(*) FROM t WHERE c = 'Foo';
|
||||
-- explicit override to BINARY on RTRIM column
|
||||
SELECT count(*) FROM t WHERE c COLLATE BINARY = 'Foo';
|
||||
} {2
|
||||
2
|
||||
2
|
||||
1}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_group_by_implicit_nocase {
|
||||
CREATE TABLE t(s TEXT COLLATE NOCASE);
|
||||
INSERT INTO t VALUES ('A'), ('a'), ('B'), ('b');
|
||||
SELECT s, count(*) FROM t GROUP BY s ORDER BY s;
|
||||
} {A|2
|
||||
B|2}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_group_by_implicit_rtrim {
|
||||
CREATE TABLE t(s TEXT COLLATE RTRIM);
|
||||
INSERT INTO t VALUES ('A'), ('A '), ('B'), ('B ');
|
||||
SELECT s, count(*) FROM t GROUP BY s ORDER BY s;
|
||||
} {A|2
|
||||
B|2}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_group_by_explicit_override {
|
||||
CREATE TABLE t(s TEXT COLLATE BINARY);
|
||||
INSERT INTO t VALUES ('A'), ('a'), ('B'), ('b');
|
||||
SELECT s, count(*) FROM t GROUP BY s COLLATE NOCASE ORDER BY s;
|
||||
} {A|2
|
||||
B|2}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_group_by_mixed_columns {
|
||||
CREATE TABLE t(a TEXT COLLATE NOCASE, b TEXT COLLATE RTRIM);
|
||||
INSERT INTO t VALUES ('A', 'x'), ('a', 'x '), ('B', 'y'), ('b', 'y ');
|
||||
SELECT a, b, count(*) FROM t GROUP BY a, b ORDER BY a, b;
|
||||
} {A|x|2
|
||||
B|y|2}
|
||||
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_subquery_preserves_column_collation {
|
||||
CREATE TABLE t(a TEXT COLLATE NOCASE, b TEXT COLLATE BINARY);
|
||||
INSERT INTO t VALUES ('A', 'A'), ('a', 'a'), ('B', 'B'), ('b', 'b');
|
||||
|
||||
-- Subquery preserves NOCASE collation
|
||||
SELECT count(*) FROM (SELECT a FROM t) WHERE a = 'a';
|
||||
-- Subquery preserves BINARY collation
|
||||
SELECT count(*) FROM (SELECT b FROM t) WHERE b = 'a';
|
||||
} {2
|
||||
1}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_subquery_preserves_explicit_collation {
|
||||
CREATE TABLE t(a TEXT COLLATE BINARY, b TEXT COLLATE BINARY);
|
||||
INSERT INTO t VALUES ('A', 'A'), ('a', 'a'), ('B', 'B'), ('b', 'b');
|
||||
|
||||
-- Explicit NOCASE in subquery is preserved
|
||||
SELECT count(*) FROM (SELECT a COLLATE NOCASE as a FROM t) WHERE a = 'a';
|
||||
-- Explicit BINARY in subquery is preserved
|
||||
SELECT count(*) FROM (SELECT b COLLATE BINARY as b FROM t) WHERE b = 'a';
|
||||
} {2
|
||||
1}
|
||||
|
||||
do_execsql_test_on_specific_db {:memory:} collate_subquery_preserves_collation_in_order_by {
|
||||
CREATE TABLE t(a TEXT COLLATE NOCASE, b TEXT COLLATE BINARY);
|
||||
INSERT INTO t VALUES ('A', 'A'), ('b', 'b'), ('C', 'C');
|
||||
|
||||
-- ORDER BY in subquery preserves NOCASE collation
|
||||
SELECT a FROM (SELECT a FROM t ORDER BY a);
|
||||
-- ORDER BY in subquery preserves BINARY collation
|
||||
SELECT b FROM (SELECT b FROM t ORDER BY b);
|
||||
} {A
|
||||
b
|
||||
C
|
||||
A
|
||||
C
|
||||
b}
|
||||
|
||||
Reference in New Issue
Block a user