# LogicTest: default parallel-stmts distsql

##
# Test a primary key with a collated string in first position (can get a key range).
#
# Danish collation chart: http://www.unicode.org/cldr/charts/30/collation/da.html

statement ok
CREATE TABLE t (
  a STRING COLLATE da,
  b INT,
  c BOOL,
  PRIMARY KEY (a, b)
)

statement ok
INSERT INTO t VALUES
  ('A' COLLATE da, 1, TRUE),
  ('A' COLLATE da, 2, NULL),
  ('a' COLLATE da, 2, FALSE),
  ('a' COLLATE da, 3, TRUE),
  ('B' COLLATE da, 3, NULL),
  ('b' COLLATE da, 4, FALSE),
  ('ü' COLLATE da, 6, TRUE),
  ('ü' COLLATE da, 5, NULL),
  ('x' COLLATE da, 5, FALSE)

query TI
SELECT a, b FROM t ORDER BY a, b
----
a  2
a  3
A  1
A  2
b  4
B  3
x  5
ü  5
ü  6

query IT
SELECT b, a FROM t ORDER BY b, a
----
1  A
2  a
2  A
3  a
3  B
4  b
5  x
5  ü
6  ü

query I
SELECT COUNT (a) FROM t WHERE a = ('a' COLLATE da)
----
2

query I
SELECT COUNT (a) FROM t WHERE a = ('y' COLLATE da)
----
0

query I
SELECT COUNT (a) FROM t WHERE a > ('a' COLLATE da) AND a < ('c' COLLATE da)
----
4

# Create an index and try again.

statement ok
CREATE INDEX ON t (b, a) STORING (c)

query ITTT
EXPLAIN SELECT a, b FROM t ORDER BY a, b
----
0  render
1  scan
1          table  t@primary
1          spans  ALL

query TI
SELECT a, b FROM t ORDER BY a, b
----
a  2
a  3
A  1
A  2
b  4
B  3
x  5
ü  5
ü  6

query ITTT
EXPLAIN SELECT b, a FROM t ORDER BY b, a
----
0  render
1  scan
1          table  t@t_b_a_idx
1          spans  ALL

query IT
SELECT b, a FROM t ORDER BY b, a
----
1  A
2  a
2  A
3  a
3  B
4  b
5  x
5  ü
6  ü

query I
SELECT COUNT (a) FROM t WHERE a = ('a' COLLATE da)
----
2

query I
SELECT COUNT (a) FROM t WHERE a = ('y' COLLATE da)
----
0

query I
SELECT COUNT (a) FROM t WHERE a > ('a' COLLATE da) AND a < ('c' COLLATE da)
----
4

# Update and try again.

statement ok
UPDATE t SET a = (a :: STRING || a :: STRING) COLLATE da

query ITTT
EXPLAIN SELECT a, b FROM t ORDER BY a, b
----
0  render
1  scan
1          table  t@primary
1          spans  ALL

query TI
SELECT a, b FROM t ORDER BY a, b
----
bb  4
BB  3
xx  5
üü  5
üü  6
aa  2
aa  3
AA  1
AA  2

query ITTT
EXPLAIN SELECT b, a FROM t ORDER BY b, a
----
0  render
1  scan
1          table  t@t_b_a_idx
1          spans  ALL

query IT
SELECT b, a FROM t ORDER BY b, a
----
1  AA
2  aa
2  AA
3  BB
3  aa
4  bb
5  xx
5  üü
6  üü

# Delete and try again

statement ok
DELETE FROM t WHERE a > ('a' COLLATE da) AND a < ('c' COLLATE da)

query ITTT
EXPLAIN SELECT a, b FROM t ORDER BY a, b
----
0  render
1  scan
1          table  t@primary
1          spans  ALL

query TI
SELECT a, b FROM t ORDER BY a, b
----
xx  5
üü  5
üü  6
aa  2
aa  3
AA  1
AA  2

query ITTT
EXPLAIN SELECT b, a FROM t ORDER BY b, a
----
0  render
1  scan
1          table  t@t_b_a_idx
1          spans  ALL

query IT
SELECT b, a FROM t ORDER BY b, a
----
1  AA
2  aa
2  AA
3  aa
5  xx
5  üü
6  üü
