locales (da_DK, fo_FO, kl_GL, nb_NO, nn_NO in glibc) sort "aa" after "z".
-- its datatype
create domain mytype as text;
create temp table foo (f1 text, f2 mytype, f3 text);
-insert into foo values('aa','bb','cc');
+insert into foo values('bb','cc','dd');
select * from foo;
f1 | f2 | f3
----+----+----
- aa | bb | cc
+ bb | cc | dd
(1 row)
drop domain mytype cascade;
select * from foo;
f1 | f3
----+----
- aa | cc
+ bb | dd
(1 row)
insert into foo values('qq','rr');
select * from foo;
f1 | f3
----+----
- aa | cc
+ bb | dd
qq | rr
(2 rows)
select * from foo;
f1 | f3
----+----
- aa | zz
+ bb | zz
qq | zz
(2 rows)
CREATE TABLE t1 (name TEXT, n INTEGER);
CREATE TABLE t2 (name TEXT, n INTEGER);
CREATE TABLE t3 (name TEXT, n INTEGER);
-INSERT INTO t1 VALUES ( 'aa', 11 );
-INSERT INTO t2 VALUES ( 'aa', 12 );
-INSERT INTO t2 VALUES ( 'bb', 22 );
-INSERT INTO t2 VALUES ( 'dd', 42 );
-INSERT INTO t3 VALUES ( 'aa', 13 );
-INSERT INTO t3 VALUES ( 'bb', 23 );
-INSERT INTO t3 VALUES ( 'cc', 33 );
+INSERT INTO t1 VALUES ( 'bb', 11 );
+INSERT INTO t2 VALUES ( 'bb', 12 );
+INSERT INTO t2 VALUES ( 'cc', 22 );
+INSERT INTO t2 VALUES ( 'ee', 42 );
+INSERT INTO t3 VALUES ( 'bb', 13 );
+INSERT INTO t3 VALUES ( 'cc', 23 );
+INSERT INTO t3 VALUES ( 'dd', 33 );
SELECT * FROM t1 FULL JOIN t2 USING (name) FULL JOIN t3 USING (name);
name | n | n | n
------+----+----+----
- aa | 11 | 12 | 13
- bb | | 22 | 23
- cc | | | 33
- dd | | 42 |
+ bb | 11 | 12 | 13
+ cc | | 22 | 23
+ dd | | | 33
+ ee | | 42 |
(4 rows)
--
USING (name);
name | n | n
------+----+----
- aa | 12 | 13
- bb | 22 | 23
+ bb | 12 | 13
+ cc | 22 | 23
(2 rows)
SELECT * FROM
USING (name);
name | n | n
------+----+----
- aa | 12 | 13
- bb | 22 | 23
- dd | 42 |
+ bb | 12 | 13
+ cc | 22 | 23
+ ee | 42 |
(3 rows)
SELECT * FROM
USING (name);
name | n | n
------+----+----
- aa | 12 | 13
- bb | 22 | 23
- cc | | 33
- dd | 42 |
+ bb | 12 | 13
+ cc | 22 | 23
+ dd | | 33
+ ee | 42 |
(4 rows)
-- Cases with non-nullable expressions in subquery results;
(SELECT name, n as s3_n, 3 as s3_2 FROM t3) s3;
name | s2_n | s2_2 | s3_n | s3_2
------+------+------+------+------
- aa | 12 | 2 | 13 | 3
- bb | 22 | 2 | 23 | 3
+ bb | 12 | 2 | 13 | 3
+ cc | 22 | 2 | 23 | 3
(2 rows)
SELECT * FROM
(SELECT name, n as s3_n, 3 as s3_2 FROM t3) s3;
name | s2_n | s2_2 | s3_n | s3_2
------+------+------+------+------
- aa | 12 | 2 | 13 | 3
- bb | 22 | 2 | 23 | 3
- dd | 42 | 2 | |
+ bb | 12 | 2 | 13 | 3
+ cc | 22 | 2 | 23 | 3
+ ee | 42 | 2 | |
(3 rows)
SELECT * FROM
(SELECT name, n as s3_n, 3 as s3_2 FROM t3) s3;
name | s2_n | s2_2 | s3_n | s3_2
------+------+------+------+------
- aa | 12 | 2 | 13 | 3
- bb | 22 | 2 | 23 | 3
- cc | | | 33 | 3
- dd | 42 | 2 | |
+ bb | 12 | 2 | 13 | 3
+ cc | 22 | 2 | 23 | 3
+ dd | | | 33 | 3
+ ee | 42 | 2 | |
(4 rows)
SELECT * FROM
(SELECT name, n as s3_n, 3 as s3_2 FROM t3) s3;
name | s1_n | s1_1 | s2_n | s2_2 | s3_n | s3_2
------+------+------+------+------+------+------
- aa | 11 | 1 | 12 | 2 | 13 | 3
+ bb | 11 | 1 | 12 | 2 | 13 | 3
(1 row)
SELECT * FROM
(SELECT name, n as s3_n, 3 as s3_2 FROM t3) s3;
name | s1_n | s1_1 | s2_n | s2_2 | s3_n | s3_2
------+------+------+------+------+------+------
- aa | 11 | 1 | 12 | 2 | 13 | 3
- bb | | | 22 | 2 | 23 | 3
- cc | | | | | 33 | 3
- dd | | | 42 | 2 | |
+ bb | 11 | 1 | 12 | 2 | 13 | 3
+ cc | | | 22 | 2 | 23 | 3
+ dd | | | | | 33 | 3
+ ee | | | 42 | 2 | |
(4 rows)
SELECT * FROM
) ss2;
name | s1_n | s2_n | s3_n
------+------+------+------
- aa | 11 | 12 | 13
- bb | | 22 | 23
- cc | | | 33
- dd | | 42 |
+ bb | 11 | 12 | 13
+ cc | | 22 | 23
+ dd | | | 33
+ ee | | 42 |
(4 rows)
SELECT * FROM
) ss2;
name | s1_n | s2_n | s2_2 | s3_n
------+------+------+------+------
- aa | 11 | 12 | 2 | 13
- bb | | 22 | 2 | 23
- cc | | | | 33
- dd | | 42 | 2 |
+ bb | 11 | 12 | 2 | 13
+ cc | | 22 | 2 | 23
+ dd | | | | 33
+ ee | | 42 | 2 |
(4 rows)
-- Test for propagation of nullability constraints into sub-joins
-- load test data
CREATE TABLE test_missing_target (a int, b int, c char(8), d char);
INSERT INTO test_missing_target VALUES (0, 1, 'XXXX', 'A');
-INSERT INTO test_missing_target VALUES (1, 2, 'AAAA', 'b');
-INSERT INTO test_missing_target VALUES (2, 2, 'AAAA', 'c');
+INSERT INTO test_missing_target VALUES (1, 2, 'ABAB', 'b');
+INSERT INTO test_missing_target VALUES (2, 2, 'ABAB', 'c');
INSERT INTO test_missing_target VALUES (3, 3, 'BBBB', 'D');
INSERT INTO test_missing_target VALUES (4, 3, 'BBBB', 'e');
INSERT INTO test_missing_target VALUES (5, 3, 'bbbb', 'F');
SELECT c, count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c;
c | count
----------+-------
- AAAA | 2
+ ABAB | 2
BBBB | 2
CCCC | 2
XXXX | 1
c
----------
XXXX
- AAAA
- AAAA
+ ABAB
+ ABAB
BBBB
BBBB
bbbb
SELECT c, count(*) FROM test_missing_target GROUP BY 1 ORDER BY 1;
c | count
----------+-------
- AAAA | 2
+ ABAB | 2
BBBB | 2
CCCC | 2
XXXX | 1
FROM test_missing_target GROUP BY lower(c) ORDER BY lower(c);
lower | count
-------+-------
- aaaa | 2
+ abab | 2
bbbb | 3
cccc | 4
xxxx | 1
-- load test data
CREATE TABLE test_missing_target (a int, b int, c char(8), d char);
INSERT INTO test_missing_target VALUES (0, 1, 'XXXX', 'A');
-INSERT INTO test_missing_target VALUES (1, 2, 'AAAA', 'b');
-INSERT INTO test_missing_target VALUES (2, 2, 'AAAA', 'c');
+INSERT INTO test_missing_target VALUES (1, 2, 'ABAB', 'b');
+INSERT INTO test_missing_target VALUES (2, 2, 'ABAB', 'c');
INSERT INTO test_missing_target VALUES (3, 3, 'BBBB', 'D');
INSERT INTO test_missing_target VALUES (4, 3, 'BBBB', 'e');
INSERT INTO test_missing_target VALUES (5, 3, 'bbbb', 'F');
SELECT c, count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c;
c | count
----------+-------
- AAAA | 2
+ ABAB | 2
BBBB | 2
bbbb | 1
CCCC | 2
c
----------
XXXX
- AAAA
- AAAA
+ ABAB
+ ABAB
BBBB
BBBB
bbbb
SELECT c, count(*) FROM test_missing_target GROUP BY 1 ORDER BY 1;
c | count
----------+-------
- AAAA | 2
+ ABAB | 2
BBBB | 2
bbbb | 1
CCCC | 2
FROM test_missing_target GROUP BY lower(c) ORDER BY lower(c);
lower | count
-------+-------
- aaaa | 2
+ abab | 2
bbbb | 3
cccc | 4
xxxx | 1
-- load test data
CREATE TABLE test_missing_target (a int, b int, c char(8), d char);
INSERT INTO test_missing_target VALUES (0, 1, 'XXXX', 'A');
-INSERT INTO test_missing_target VALUES (1, 2, 'AAAA', 'b');
-INSERT INTO test_missing_target VALUES (2, 2, 'AAAA', 'c');
+INSERT INTO test_missing_target VALUES (1, 2, 'ABAB', 'b');
+INSERT INTO test_missing_target VALUES (2, 2, 'ABAB', 'c');
INSERT INTO test_missing_target VALUES (3, 3, 'BBBB', 'D');
INSERT INTO test_missing_target VALUES (4, 3, 'BBBB', 'e');
INSERT INTO test_missing_target VALUES (5, 3, 'bbbb', 'F');
SELECT c, count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c;
c | count
----------+-------
- AAAA | 2
+ ABAB | 2
bbbb | 1
BBBB | 2
cccc | 2
c
----------
XXXX
- AAAA
- AAAA
+ ABAB
+ ABAB
BBBB
BBBB
bbbb
SELECT c, count(*) FROM test_missing_target GROUP BY 1 ORDER BY 1;
c | count
----------+-------
- AAAA | 2
+ ABAB | 2
bbbb | 1
BBBB | 2
cccc | 2
FROM test_missing_target GROUP BY lower(c) ORDER BY lower(c);
lower | count
-------+-------
- aaaa | 2
+ abab | 2
bbbb | 3
cccc | 4
xxxx | 1
create domain mytype as text;
create temp table foo (f1 text, f2 mytype, f3 text);
-insert into foo values('aa','bb','cc');
+insert into foo values('bb','cc','dd');
select * from foo;
drop domain mytype cascade;
CREATE TABLE t2 (name TEXT, n INTEGER);
CREATE TABLE t3 (name TEXT, n INTEGER);
-INSERT INTO t1 VALUES ( 'aa', 11 );
-INSERT INTO t2 VALUES ( 'aa', 12 );
-INSERT INTO t2 VALUES ( 'bb', 22 );
-INSERT INTO t2 VALUES ( 'dd', 42 );
-INSERT INTO t3 VALUES ( 'aa', 13 );
-INSERT INTO t3 VALUES ( 'bb', 23 );
-INSERT INTO t3 VALUES ( 'cc', 33 );
+INSERT INTO t1 VALUES ( 'bb', 11 );
+INSERT INTO t2 VALUES ( 'bb', 12 );
+INSERT INTO t2 VALUES ( 'cc', 22 );
+INSERT INTO t2 VALUES ( 'ee', 42 );
+INSERT INTO t3 VALUES ( 'bb', 13 );
+INSERT INTO t3 VALUES ( 'cc', 23 );
+INSERT INTO t3 VALUES ( 'dd', 33 );
SELECT * FROM t1 FULL JOIN t2 USING (name) FULL JOIN t3 USING (name);
-- load test data
CREATE TABLE test_missing_target (a int, b int, c char(8), d char);
INSERT INTO test_missing_target VALUES (0, 1, 'XXXX', 'A');
-INSERT INTO test_missing_target VALUES (1, 2, 'AAAA', 'b');
-INSERT INTO test_missing_target VALUES (2, 2, 'AAAA', 'c');
+INSERT INTO test_missing_target VALUES (1, 2, 'ABAB', 'b');
+INSERT INTO test_missing_target VALUES (2, 2, 'ABAB', 'c');
INSERT INTO test_missing_target VALUES (3, 3, 'BBBB', 'D');
INSERT INTO test_missing_target VALUES (4, 3, 'BBBB', 'e');
INSERT INTO test_missing_target VALUES (5, 3, 'bbbb', 'F');