# LogicTest: local local-opt local-parallel-stmts fakedist fakedist-opt fakedist-metadata fakedist-disk

##
# 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)

statement ok
CREATE UNIQUE INDEX ON t (b, a)

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

# Update and try again.

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

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 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 TI
SELECT a, b FROM t ORDER BY a, b
----
xx  5
üü  5
üü  6
aa  2
aa  3
AA  1
AA  2

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