| Index: third_party/sqlite/src/test/e_createtable.test | 
| diff --git a/third_party/sqlite/src/test/e_createtable.test b/third_party/sqlite/src/test/e_createtable.test | 
| index c67195ed778a6e3dbc07b9fc76a3cea551da5ce2..2921d86c6f3e81eeb721b2dbdbbeddd7926a8e45 100644 | 
| --- a/third_party/sqlite/src/test/e_createtable.test | 
| +++ b/third_party/sqlite/src/test/e_createtable.test | 
| @@ -58,8 +58,6 @@ proc table_list {} { | 
| } | 
|  | 
|  | 
| -# EVIDENCE-OF: R-25262-01881 -- syntax diagram type-name | 
| -# | 
| do_createtable_tests 0.1.1 -repair { | 
| drop_all_tables | 
| } { | 
| @@ -79,12 +77,7 @@ do_createtable_tests 0.1.2 -error { | 
| } | 
|  | 
|  | 
| -# EVIDENCE-OF: R-18762-12428 -- syntax diagram column-constraint | 
| -# | 
| -#   Note: Not shown in the syntax diagram is the "NULL" constraint. This | 
| -#         is the opposite of "NOT NULL" - it implies that the column may | 
| -#         take a NULL value. This is the default anyway, so this type of | 
| -#         constraint is rarely used. | 
| +# syntax diagram column-constraint | 
| # | 
| do_createtable_tests 0.2.1 -repair { | 
| drop_all_tables | 
| @@ -131,7 +124,7 @@ do_createtable_tests 0.2.1 -repair { | 
| } {} | 
| } | 
|  | 
| -# EVIDENCE-OF: R-17905-31923 -- syntax diagram table-constraint | 
| +# -- syntax diagram table-constraint | 
| # | 
| do_createtable_tests 0.3.1 -repair { | 
| drop_all_tables | 
| @@ -150,7 +143,7 @@ do_createtable_tests 0.3.1 -repair { | 
| 4.1   "CREATE TABLE t1(c1, c2, FOREIGN KEY(c1) REFERENCES t2)"           {} | 
| } | 
|  | 
| -# EVIDENCE-OF: R-18765-31171 -- syntax diagram column-def | 
| +# -- syntax diagram column-def | 
| # | 
| do_createtable_tests 0.4.1 -repair { | 
| drop_all_tables | 
| @@ -165,7 +158,7 @@ do_createtable_tests 0.4.1 -repair { | 
| } {} | 
| } | 
|  | 
| -# EVIDENCE-OF: R-59573-11075 -- syntax diagram create-table-stmt | 
| +# -- syntax diagram create-table-stmt | 
| # | 
| do_createtable_tests 0.5.1 -repair { | 
| drop_all_tables | 
| @@ -190,7 +183,6 @@ do_createtable_tests 0.5.1 -repair { | 
| 15    "CREATE TABLE t1 AS SELECT count(*), max(b), min(a) FROM t2"  {} | 
| } | 
|  | 
| -# EVIDENCE-OF: R-32138-02228 -- syntax diagram foreign-key-clause | 
| # | 
| #   1:         Explicit parent-key columns. | 
| #   2:         Implicit child-key columns. | 
| @@ -870,11 +862,11 @@ do_createtable_tests 3.2.3 -query { | 
| 3   "INSERT INTO t1 DEFAULT VALUES"               {NULL NULL NULL} | 
| } | 
|  | 
| -# EVIDENCE-OF: R-62940-43005 An explicit DEFAULT clause may specify that | 
| +# EVIDENCE-OF: R-07343-35026 An explicit DEFAULT clause may specify that | 
| # the default value is NULL, a string constant, a blob constant, a | 
| -# signed-number, or any constant expression enclosed in parentheses. An | 
| -# explicit default value may also be one of the special case-independent | 
| -# keywords CURRENT_TIME, CURRENT_DATE or CURRENT_TIMESTAMP. | 
| +# signed-number, or any constant expression enclosed in parentheses. A | 
| +# default value may also be one of the special case-independent keywords | 
| +# CURRENT_TIME, CURRENT_DATE or CURRENT_TIMESTAMP. | 
| # | 
| do_execsql_test e_createtable-3.3.1 { | 
| CREATE TABLE t4( | 
| @@ -892,9 +884,10 @@ do_execsql_test e_createtable-3.3.1 { | 
| ); | 
| } {} | 
|  | 
| -# EVIDENCE-OF: R-10288-43169 For the purposes of the DEFAULT clause, an | 
| -# expression is considered constant provided that it does not contain | 
| -# any sub-queries or string constants enclosed in double quotes. | 
| +# EVIDENCE-OF: R-18415-27776 For the purposes of the DEFAULT clause, an | 
| +# expression is considered constant if it does contains no sub-queries, | 
| +# column or table references, bound parameters, or string literals | 
| +# enclosed in double-quotes instead of single-quotes. | 
| # | 
| do_createtable_tests 3.4.1 -error { | 
| default value of column [x] is not constant | 
| @@ -903,6 +896,7 @@ do_createtable_tests 3.4.1 -error { | 
| 2   {CREATE TABLE t5(x DEFAULT ( "abc" ))}  {} | 
| 3   {CREATE TABLE t5(x DEFAULT ( 1 IN (SELECT 1) ))}  {} | 
| 4   {CREATE TABLE t5(x DEFAULT ( EXISTS (SELECT 1) ))}  {} | 
| +  5   {CREATE TABLE t5(x DEFAULT ( x!=?1 ))}  {} | 
| } | 
| do_createtable_tests 3.4.2 -repair { | 
| catchsql { DROP TABLE t5 } | 
| @@ -989,9 +983,9 @@ do_execsql_test e_createtable-3.7.4 { | 
| SELECT quote(a), quote(b) FROM t6; | 
| } {1 2 'X' 3 1 4 'X' 5} | 
|  | 
| -# EVIDENCE-OF: R-18683-56219 If the default value of a column is | 
| -# CURRENT_TIME, CURRENT_DATE or CURRENT_DATETIME, then the value used in | 
| -# the new row is a text representation of the current UTC date and/or | 
| +# EVIDENCE-OF: R-15363-55230 If the default value of a column is | 
| +# CURRENT_TIME, CURRENT_DATE or CURRENT_TIMESTAMP, then the value used | 
| +# in the new row is a text representation of the current UTC date and/or | 
| # time. | 
| # | 
| #     This is difficult to test literally without knowing what time the | 
| @@ -1111,8 +1105,8 @@ do_catchsql_test e_createtable-3.11.5 { | 
| # EVIDENCE-OF: R-52382-54248 Each table in SQLite may have at most one | 
| # PRIMARY KEY. | 
| # | 
| -# EVIDENCE-OF: R-18080-47271 If there is more than one PRIMARY KEY | 
| -# clause in a single CREATE TABLE statement, it is an error. | 
| +# EVIDENCE-OF: R-31826-01813 An error is raised if more than one PRIMARY | 
| +# KEY clause appears in a CREATE TABLE statement. | 
| # | 
| #     To test the two above, show that zero primary keys is Ok, one primary | 
| #     key is Ok, and two or more primary keys is an error. | 
| @@ -1135,6 +1129,17 @@ do_createtable_tests 4.1.2 -error { | 
| 6    "CREATE TABLE t5(a INTEGER PRIMARY KEY, b, c, PRIMARY KEY(a))"    {} | 
| } | 
|  | 
| +# EVIDENCE-OF: R-54755-39291 The PRIMARY KEY is optional for ordinary | 
| +# tables but is required for WITHOUT ROWID tables. | 
| +# | 
| +do_catchsql_test 4.1.3 { | 
| +  CREATE TABLE t6(a, b); --ok | 
| +} {0 {}} | 
| +do_catchsql_test 4.1.4 { | 
| +  CREATE TABLE t7(a, b) WITHOUT ROWID; --Error, no PRIMARY KEY | 
| +} {1 {PRIMARY KEY missing on table t7}} | 
| + | 
| + | 
| proc table_pk {tbl} { | 
| set pk [list] | 
| db eval "pragma table_info($tbl)" a { | 
| @@ -1168,12 +1173,12 @@ do_createtable_tests 4.2 -repair { | 
| 2.3    "CREATE TABLE t5(a, b INTEGER PRIMARY KEY, c)"       {b} | 
| } | 
|  | 
| -# EVIDENCE-OF: R-33986-09410 Each row in a table with a primary key must | 
| -# feature a unique combination of values in its primary key columns. | 
| +# EVIDENCE-OF: R-59124-61339 Each row in a table with a primary key must | 
| +# have a unique combination of values in its primary key columns. | 
| # | 
| -# EVIDENCE-OF: R-39102-06737 If an INSERT or UPDATE statement attempts | 
| -# to modify the table content so that two or more rows feature identical | 
| -# primary key values, it is a constraint violation. | 
| +# EVIDENCE-OF: R-06471-16287 If an INSERT or UPDATE statement attempts | 
| +# to modify the table content so that two or more rows have identical | 
| +# primary key values, that is a constraint violation. | 
| # | 
| drop_all_tables | 
| do_execsql_test 4.3.0 { | 
| @@ -1190,13 +1195,14 @@ do_execsql_test 4.3.0 { | 
| INSERT INTO t2 VALUES(X'ABCDEF',  'three'); | 
| } {} | 
|  | 
| -do_createtable_tests 4.3.1 -error { %s not unique } { | 
| +do_createtable_tests 4.3.1 -error {UNIQUE constraint failed: t1.x} { | 
| 1    "INSERT INTO t1 VALUES(0, 0)"                 {"column x is"} | 
| 2    "INSERT INTO t1 VALUES(45.5, 'abc')"          {"column x is"} | 
| 3    "INSERT INTO t1 VALUES(0.0, 'abc')"           {"column x is"} | 
| 4    "INSERT INTO t1 VALUES('brambles', 'abc')"    {"column x is"} | 
| 5    "INSERT INTO t1 VALUES(X'ABCDEF', 'abc')"     {"column x is"} | 
| - | 
| +} | 
| +do_createtable_tests 4.3.1 -error {UNIQUE constraint failed: t2.x, t2.y} { | 
| 6    "INSERT INTO t2 VALUES(0, 'zero')"            {"columns x, y are"} | 
| 7    "INSERT INTO t2 VALUES(45.5, 'one')"          {"columns x, y are"} | 
| 8    "INSERT INTO t2 VALUES(0.0, 'zero')"          {"columns x, y are"} | 
| @@ -1216,13 +1222,14 @@ do_createtable_tests 4.3.2 { | 
| 9    "INSERT INTO t2 VALUES('brambles', 'abc')"    {} | 
| 10   "INSERT INTO t2 VALUES(X'ABCDEF', 'abc')"     {} | 
| } | 
| -do_createtable_tests 4.3.3 -error { %s not unique } { | 
| +do_createtable_tests 4.3.3 -error {UNIQUE constraint failed: t1.x} { | 
| 1    "UPDATE t1 SET x=0           WHERE y='two'"    {"column x is"} | 
| 2    "UPDATE t1 SET x='brambles'  WHERE y='three'"  {"column x is"} | 
| 3    "UPDATE t1 SET x=45.5        WHERE y='zero'"   {"column x is"} | 
| 4    "UPDATE t1 SET x=X'ABCDEF'   WHERE y='one'"    {"column x is"} | 
| 5    "UPDATE t1 SET x=0.0         WHERE y='three'"  {"column x is"} | 
| - | 
| +} | 
| +do_createtable_tests 4.3.3 -error {UNIQUE constraint failed: t2.x, t2.y} { | 
| 6    "UPDATE t2 SET x=0, y='zero' WHERE y='two'"    {"columns x, y are"} | 
| 7    "UPDATE t2 SET x='brambles', y='two' WHERE y='three'" | 
| {"columns x, y are"} | 
| @@ -1258,11 +1265,12 @@ do_createtable_tests 4.4 { | 
| 14   "INSERT INTO t2 VALUES(NULL, NULL)"           {} | 
| } | 
|  | 
| -# EVIDENCE-OF: R-61866-38053 Unless the column is an INTEGER PRIMARY KEY | 
| -# SQLite allows NULL values in a PRIMARY KEY column. | 
| +# EVIDENCE-OF: R-35113-43214 Unless the column is an INTEGER PRIMARY KEY | 
| +# or the table is a WITHOUT ROWID table or the column is declared NOT | 
| +# NULL, SQLite allows NULL values in a PRIMARY KEY column. | 
| # | 
| #     If the column is an integer primary key, attempting to insert a NULL | 
| -#     into the column triggers the auto-increment behaviour. Attempting | 
| +#     into the column triggers the auto-increment behavior. Attempting | 
| #     to use UPDATE to set an ipk column to a NULL value is an error. | 
| # | 
| do_createtable_tests 4.5.1 { | 
| @@ -1281,6 +1289,14 @@ do_catchsql_test 4.5.3 { | 
| INSERT INTO t3 VALUES(2, 5, 3); | 
| UPDATE t3 SET u = NULL WHERE s = 2; | 
| } {1 {datatype mismatch}} | 
| +do_catchsql_test 4.5.4 { | 
| +  CREATE TABLE t4(s, u INT PRIMARY KEY, v) WITHOUT ROWID; | 
| +  INSERT INTO t4 VALUES(1, NULL, 2); | 
| +} {1 {NOT NULL constraint failed: t4.u}} | 
| +do_catchsql_test 4.5.5 { | 
| +  CREATE TABLE t5(s, u INT PRIMARY KEY NOT NULL, v); | 
| +  INSERT INTO t5 VALUES(1, NULL, 2); | 
| +} {1 {NOT NULL constraint failed: t5.u}} | 
|  | 
| # EVIDENCE-OF: R-00227-21080 A UNIQUE constraint is similar to a PRIMARY | 
| # KEY constraint, except that a single table may have any number of | 
| @@ -1294,14 +1310,12 @@ do_createtable_tests 4.6 { | 
| 4    "CREATE TABLE t4(a, b, c, UNIQUE(a, b, c))"                 {} | 
| } | 
|  | 
| -# EVIDENCE-OF: R-55240-58877 For each UNIQUE constraint on the table, | 
| -# each row must feature a unique combination of values in the columns | 
| +# EVIDENCE-OF: R-30981-64168 For each UNIQUE constraint on the table, | 
| +# each row must contain a unique combination of values in the columns | 
| # identified by the UNIQUE constraint. | 
| # | 
| -# EVIDENCE-OF: R-47733-51480 If an INSERT or UPDATE statement attempts | 
| -# to modify the table content so that two or more rows feature identical | 
| -# values in a set of columns that are subject to a UNIQUE constraint, it | 
| -# is a constraint violation. | 
| +# EVIDENCE-OF: R-59124-61339 Each row in a table with a primary key must | 
| +# have a unique combination of values in its primary key columns. | 
| # | 
| do_execsql_test 4.7.0 { | 
| INSERT INTO t1 VALUES(1, 2); | 
| @@ -1313,29 +1327,29 @@ do_execsql_test 4.7.0 { | 
| INSERT INTO t4 VALUES('xyx', 2, 1); | 
| INSERT INTO t4 VALUES('uvw', 1, 1); | 
| } | 
| -do_createtable_tests 4.7.1 -error { %s not unique } { | 
| -  1    "INSERT INTO t1 VALUES(1, 'one')"             {{column a is}} | 
| -  2    "INSERT INTO t1 VALUES(4.3, 'two')"           {{column a is}} | 
| -  3    "INSERT INTO t1 VALUES('reveal', 'three')"    {{column a is}} | 
| -  4    "INSERT INTO t1 VALUES(X'123456', 'four')"    {{column a is}} | 
| +do_createtable_tests 4.7.1 -error {UNIQUE constraint failed: %s} { | 
| +  1    "INSERT INTO t1 VALUES(1, 'one')"             {{t1.a}} | 
| +  2    "INSERT INTO t1 VALUES(4.3, 'two')"           {{t1.a}} | 
| +  3    "INSERT INTO t1 VALUES('reveal', 'three')"    {{t1.a}} | 
| +  4    "INSERT INTO t1 VALUES(X'123456', 'four')"    {{t1.a}} | 
|  | 
| -  5    "UPDATE t1 SET a = 1 WHERE rowid=2"           {{column a is}} | 
| -  6    "UPDATE t1 SET a = 4.3 WHERE rowid=3"         {{column a is}} | 
| -  7    "UPDATE t1 SET a = 'reveal' WHERE rowid=4"    {{column a is}} | 
| -  8    "UPDATE t1 SET a = X'123456' WHERE rowid=1"   {{column a is}} | 
| +  5    "UPDATE t1 SET a = 1 WHERE rowid=2"           {{t1.a}} | 
| +  6    "UPDATE t1 SET a = 4.3 WHERE rowid=3"         {{t1.a}} | 
| +  7    "UPDATE t1 SET a = 'reveal' WHERE rowid=4"    {{t1.a}} | 
| +  8    "UPDATE t1 SET a = X'123456' WHERE rowid=1"   {{t1.a}} | 
|  | 
| -  9    "INSERT INTO t4 VALUES('xyx', 1, 1)"          {{columns a, b, c are}} | 
| -  10   "INSERT INTO t4 VALUES('xyx', 2, 1)"          {{columns a, b, c are}} | 
| -  11   "INSERT INTO t4 VALUES('uvw', 1, 1)"          {{columns a, b, c are}} | 
| +  9    "INSERT INTO t4 VALUES('xyx', 1, 1)"          {{t4.a, t4.b, t4.c}} | 
| +  10   "INSERT INTO t4 VALUES('xyx', 2, 1)"          {{t4.a, t4.b, t4.c}} | 
| +  11   "INSERT INTO t4 VALUES('uvw', 1, 1)"          {{t4.a, t4.b, t4.c}} | 
|  | 
| -  12   "UPDATE t4 SET a='xyx' WHERE rowid=3"         {{columns a, b, c are}} | 
| -  13   "UPDATE t4 SET b=1 WHERE rowid=2"             {{columns a, b, c are}} | 
| -  14   "UPDATE t4 SET a=0, b=0, c=0"                 {{columns a, b, c are}} | 
| +  12   "UPDATE t4 SET a='xyx' WHERE rowid=3"         {{t4.a, t4.b, t4.c}} | 
| +  13   "UPDATE t4 SET b=1 WHERE rowid=2"             {{t4.a, t4.b, t4.c}} | 
| +  14   "UPDATE t4 SET a=0, b=0, c=0"                 {{t4.a, t4.b, t4.c}} | 
| } | 
|  | 
| -# EVIDENCE-OF: R-21289-11559 As with PRIMARY KEY constraints, for the | 
| -# purposes of UNIQUE constraints NULL values are considered distinct | 
| -# from all other values (including other NULLs). | 
| +# EVIDENCE-OF: R-00404-17670 For the purposes of UNIQUE constraints, | 
| +# NULL values are considered distinct from all other values, including | 
| +# other NULLs. | 
| # | 
| do_createtable_tests 4.8 { | 
| 1    "INSERT INTO t1 VALUES(NULL, NULL)"           {} | 
| @@ -1350,10 +1364,9 @@ do_createtable_tests 4.8 { | 
| 9    "UPDATE t4 SET c = NULL"                      {} | 
| } | 
|  | 
| -# EVIDENCE-OF: R-26983-26377 INTEGER PRIMARY KEY columns aside, both | 
| -# UNIQUE and PRIMARY KEY constraints are implemented by creating an | 
| -# index in the database (in the same way as a "CREATE UNIQUE INDEX" | 
| -# statement would). | 
| +# EVIDENCE-OF: R-55820-29984 In most cases, UNIQUE and PRIMARY KEY | 
| +# constraints are implemented by creating a unique index in the | 
| +# database. | 
| do_createtable_tests 4.9 -repair drop_all_tables -query { | 
| SELECT count(*) FROM sqlite_master WHERE type='index' | 
| } { | 
| @@ -1364,7 +1377,7 @@ do_createtable_tests 4.9 -repair drop_all_tables -query { | 
| 5    "CREATE TABLE t1(a PRIMARY KEY, b, c, UNIQUE(c, b))"  2 | 
| } | 
|  | 
| -# EVIDENCE-OF: R-02252-33116 Such an index is used like any other index | 
| +# Obsolete: R-02252-33116 Such an index is used like any other index | 
| # in the database to optimize queries. | 
| # | 
| do_execsql_test 4.10.0 { | 
| @@ -1373,13 +1386,13 @@ do_execsql_test 4.10.0 { | 
| } | 
| do_createtable_tests 4.10 { | 
| 1    "EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE b = 5" | 
| -       {0 0 0 {SEARCH TABLE t1 USING INDEX sqlite_autoindex_t1_1 (b=?) (~1 rows)}} | 
| +       {0 0 0 {SEARCH TABLE t1 USING INDEX sqlite_autoindex_t1_1 (b=?)}} | 
|  | 
| 2    "EXPLAIN QUERY PLAN SELECT * FROM t2 ORDER BY b, c" | 
| -       {0 0 0 {SCAN TABLE t2 USING INDEX sqlite_autoindex_t2_1 (~1000000 rows)}} | 
| +       {0 0 0 {SCAN TABLE t2 USING INDEX sqlite_autoindex_t2_1}} | 
|  | 
| 3    "EXPLAIN QUERY PLAN SELECT * FROM t2 WHERE b=10 AND c>10" | 
| -       {0 0 0 {SEARCH TABLE t2 USING INDEX sqlite_autoindex_t2_1 (b=? AND c>?) (~2 rows)}} | 
| +       {0 0 0 {SEARCH TABLE t2 USING INDEX sqlite_autoindex_t2_1 (b=? AND c>?)}} | 
| } | 
|  | 
| # EVIDENCE-OF: R-45493-35653 A CHECK constraint may be attached to a | 
| @@ -1412,21 +1425,21 @@ do_execsql_test 4.11 { | 
| INSERT INTO t2 SELECT * FROM x2; | 
| } | 
|  | 
| -do_createtable_tests 4.11 -error {constraint failed} { | 
| -  1a    "INSERT INTO x1 VALUES('one', 0)"       {} | 
| -  1b    "INSERT INTO t1 VALUES('one', -4.0)"    {} | 
| +do_createtable_tests 4.11 -error {CHECK constraint failed: %s} { | 
| +  1a    "INSERT INTO x1 VALUES('one', 0)"       {x1} | 
| +  1b    "INSERT INTO t1 VALUES('one', -4.0)"    {t1} | 
|  | 
| -  2a    "INSERT INTO x2 VALUES('abc', 1)"       {} | 
| -  2b    "INSERT INTO t2 VALUES('abc', 1)"       {} | 
| +  2a    "INSERT INTO x2 VALUES('abc', 1)"       {x2} | 
| +  2b    "INSERT INTO t2 VALUES('abc', 1)"       {t2} | 
|  | 
| -  3a    "INSERT INTO x2 VALUES(0, 'abc')"       {} | 
| -  3b    "INSERT INTO t2 VALUES(0, 'abc')"       {} | 
| +  3a    "INSERT INTO x2 VALUES(0, 'abc')"       {x2} | 
| +  3b    "INSERT INTO t2 VALUES(0, 'abc')"       {t2} | 
|  | 
| -  4a    "UPDATE t1 SET b=-1 WHERE rowid=1"      {} | 
| -  4b    "UPDATE x1 SET b=-1 WHERE rowid=1"      {} | 
| +  4a    "UPDATE t1 SET b=-1 WHERE rowid=1"      {t1} | 
| +  4b    "UPDATE x1 SET b=-1 WHERE rowid=1"      {x1} | 
|  | 
| -  4a    "UPDATE x2 SET a='' WHERE rowid=1"      {} | 
| -  4b    "UPDATE t2 SET a='' WHERE rowid=1"      {} | 
| +  4a    "UPDATE x2 SET a='' WHERE rowid=1"      {x2} | 
| +  4b    "UPDATE t2 SET a='' WHERE rowid=1"      {t2} | 
| } | 
|  | 
| # EVIDENCE-OF: R-34109-39108 If the CHECK expression evaluates to NULL, | 
| @@ -1477,9 +1490,7 @@ do_execsql_test 4.14.0 { | 
| INSERT INTO t3 VALUES('x', 'y', 'z'); | 
| INSERT INTO t3 VALUES(1, 2, 3); | 
| } | 
| -do_createtable_tests 4.14 -error { | 
| -  %s may not be NULL | 
| -} { | 
| +do_createtable_tests 4.14 -error {NOT NULL constraint failed: %s} { | 
| 1    "INSERT INTO t1 VALUES(NULL, 'a')"         {t1.a} | 
| 2    "INSERT INTO t2 VALUES(NULL, 'b')"         {t2.a} | 
| 3    "INSERT INTO t3 VALUES('c', 'd', NULL)"    {t3.c} | 
| @@ -1545,12 +1556,12 @@ do_execsql_test 4.15.0 { | 
| } | 
|  | 
| foreach {tn tbl res ac data} { | 
| -  1   t1_ab    {1 {column a is not unique}} 0 {1 one 2 two 3 three} | 
| -  2   t1_ro    {1 {column a is not unique}} 1 {1 one 2 two} | 
| -  3   t1_fa    {1 {column a is not unique}} 0 {1 one 2 two 3 three 4 string} | 
| +  1   t1_ab    {1 {UNIQUE constraint failed: t1_ab.a}} 0 {1 one 2 two 3 three} | 
| +  2   t1_ro    {1 {UNIQUE constraint failed: t1_ro.a}} 1 {1 one 2 two} | 
| +  3   t1_fa    {1 {UNIQUE constraint failed: t1_fa.a}} 0 {1 one 2 two 3 three 4 string} | 
| 4   t1_ig    {0 {}} 0 {1 one 2 two 3 three 4 string 6 string} | 
| 5   t1_re    {0 {}} 0 {1 one 2 two 4 string 3 string 6 string} | 
| -  6   t1_xx    {1 {column a is not unique}} 0 {1 one 2 two 3 three} | 
| +  6   t1_xx    {1 {UNIQUE constraint failed: t1_xx.a}} 0 {1 one 2 two 3 three} | 
| } { | 
| catchsql COMMIT | 
| do_execsql_test  4.15.$tn.1 "BEGIN; INSERT INTO $tbl VALUES(3, 'three')" | 
| @@ -1563,12 +1574,12 @@ foreach {tn tbl res ac data} { | 
| do_execsql_test 4.15.$tn.4 "SELECT * FROM $tbl" $data | 
| } | 
| foreach {tn tbl res ac data} { | 
| -  1   t2_ab    {1 {t2_ab.b may not be NULL}} 0 {1 one 2 two 3 three} | 
| -  2   t2_ro    {1 {t2_ro.b may not be NULL}} 1 {1 one 2 two} | 
| -  3   t2_fa    {1 {t2_fa.b may not be NULL}} 0 {1 one 2 two 3 three 4 xx} | 
| +  1   t2_ab    {1 {NOT NULL constraint failed: t2_ab.b}} 0 {1 one 2 two 3 three} | 
| +  2   t2_ro    {1 {NOT NULL constraint failed: t2_ro.b}} 1 {1 one 2 two} | 
| +  3   t2_fa    {1 {NOT NULL constraint failed: t2_fa.b}} 0 {1 one 2 two 3 three 4 xx} | 
| 4   t2_ig    {0 {}} 0 {1 one 2 two 3 three 4 xx 6 xx} | 
| -  5   t2_re    {1 {t2_re.b may not be NULL}} 0 {1 one 2 two 3 three} | 
| -  6   t2_xx    {1 {t2_xx.b may not be NULL}} 0 {1 one 2 two 3 three} | 
| +  5   t2_re    {1 {NOT NULL constraint failed: t2_re.b}} 0 {1 one 2 two 3 three} | 
| +  6   t2_xx    {1 {NOT NULL constraint failed: t2_xx.b}} 0 {1 one 2 two 3 three} | 
| } { | 
| catchsql COMMIT | 
| do_execsql_test  4.16.$tn.1 "BEGIN; INSERT INTO $tbl VALUES(3, 'three')" | 
| @@ -1581,12 +1592,16 @@ foreach {tn tbl res ac data} { | 
| do_execsql_test 4.16.$tn.4 "SELECT * FROM $tbl" $data | 
| } | 
| foreach {tn tbl res ac data} { | 
| -  1   t3_ab    {1 {columns a, b are not unique}} 0 {1 one 2 two 3 three} | 
| -  2   t3_ro    {1 {columns a, b are not unique}} 1 {1 one 2 two} | 
| -  3   t3_fa    {1 {columns a, b are not unique}} 0 {1 one 2 two 3 three 4 three} | 
| +  1   t3_ab    {1 {UNIQUE constraint failed: t3_ab.a, t3_ab.b}} | 
| +               0 {1 one 2 two 3 three} | 
| +  2   t3_ro    {1 {UNIQUE constraint failed: t3_ro.a, t3_ro.b}} | 
| +               1 {1 one 2 two} | 
| +  3   t3_fa    {1 {UNIQUE constraint failed: t3_fa.a, t3_fa.b}} | 
| +               0 {1 one 2 two 3 three 4 three} | 
| 4   t3_ig    {0 {}} 0 {1 one 2 two 3 three 4 three 6 three} | 
| 5   t3_re    {0 {}} 0 {1 one 2 two 4 three 3 three 6 three} | 
| -  6   t3_xx    {1 {columns a, b are not unique}} 0 {1 one 2 two 3 three} | 
| +  6   t3_xx    {1 {UNIQUE constraint failed: t3_xx.a, t3_xx.b}} | 
| +               0 {1 one 2 two 3 three} | 
| } { | 
| catchsql COMMIT | 
| do_execsql_test  4.17.$tn.1 "BEGIN; INSERT INTO $tbl VALUES(3, 'three')" | 
| @@ -1596,7 +1611,7 @@ foreach {tn tbl res ac data} { | 
| " $res | 
|  | 
| do_test e_createtable-4.17.$tn.3 { sqlite3_get_autocommit db } $ac | 
| -  do_execsql_test 4.17.$tn.4 "SELECT * FROM $tbl" $data | 
| +  do_execsql_test 4.17.$tn.4 "SELECT * FROM $tbl ORDER BY rowid" $data | 
| } | 
| catchsql COMMIT | 
|  | 
| @@ -1617,7 +1632,7 @@ do_execsql_test 4.18.1 { | 
| do_execsql_test  4.18.2 { BEGIN; INSERT INTO t4 VALUES(5, 6) } | 
| do_catchsql_test 4.18.3 { | 
| INSERT INTO t4 SELECT a+4, b+4 FROM t4 | 
| -} {1 {constraint failed}} | 
| +} {1 {CHECK constraint failed: t4}} | 
| do_test e_createtable-4.18.4 { sqlite3_get_autocommit db } 0 | 
| do_execsql_test 4.18.5 { SELECT * FROM t4 } {1 2 3 4 5 6} | 
|  | 
| @@ -1630,7 +1645,7 @@ do_execsql_test 4.19.0 { | 
| do_catchsql_test 4.19.1 { INSERT INTO t5 VALUES(NULL, 'not null') } {0 {}} | 
| do_execsql_test  4.19.2 { SELECT * FROM t5 } {} | 
| do_catchsql_test 4.19.3 { INSERT INTO t5 VALUES('not null', NULL) } \ | 
| -  {1 {t5.b may not be NULL}} | 
| +  {1 {NOT NULL constraint failed: t5.b}} | 
| do_execsql_test  4.19.4 { SELECT * FROM t5 } {} | 
|  | 
| #------------------------------------------------------------------------ | 
| @@ -1641,6 +1656,10 @@ do_execsql_test  4.19.4 { SELECT * FROM t5 } {} | 
| # of the special case-independent names "rowid", "oid", or "_rowid_" in | 
| # place of a column name. | 
| # | 
| +# EVIDENCE-OF: R-06726-07466 A column name can be any of the names | 
| +# defined in the CREATE TABLE statement or one of the following special | 
| +# identifiers: "ROWID", "OID", or "_ROWID_". | 
| +# | 
| drop_all_tables | 
| do_execsql_test 5.1.0 { | 
| CREATE TABLE t1(x, y); | 
| @@ -1665,6 +1684,10 @@ do_createtable_tests 5.1 { | 
| # explicitly declared column and cannot be used to retrieve the integer | 
| # rowid value. | 
| # | 
| +# EVIDENCE-OF: R-44615-33286 The special identifiers only refer to the | 
| +# row key if the CREATE TABLE statement does not define a real column | 
| +# with the same name. | 
| +# | 
| do_execsql_test 5.2.0 { | 
| CREATE TABLE t2(oid, b); | 
| CREATE TABLE t3(a, _rowid_); | 
| @@ -1699,10 +1722,10 @@ proc is_integer_primary_key {tbl col} { | 
| }]] 0 | 
| } | 
|  | 
| -# EVIDENCE-OF: R-53738-31673 With one exception, if a table has a | 
| -# primary key that consists of a single column, and the declared type of | 
| -# that column is "INTEGER" in any mixture of upper and lower case, then | 
| -# the column becomes an alias for the rowid. | 
| +# EVIDENCE-OF: R-47901-33947 With one exception noted below, if a rowid | 
| +# table has a primary key that consists of a single column and the | 
| +# declared type of that column is "INTEGER" in any mixture of upper and | 
| +# lower case, then the column becomes an alias for the rowid. | 
| # | 
| # EVIDENCE-OF: R-45951-08347 if the declaration of a column with | 
| # declared type "INTEGER" includes an "PRIMARY KEY DESC" clause, it does | 
| @@ -1755,16 +1778,16 @@ do_execsql_test 5.4.3 { | 
|  | 
| do_catchsql_test 5.4.4.1 { | 
| INSERT INTO t6 VALUES(2) | 
| -} {1 {column pk is not unique}} | 
| +} {1 {UNIQUE constraint failed: t6.pk}} | 
| do_catchsql_test 5.4.4.2 { | 
| INSERT INTO t7 VALUES(2) | 
| -} {1 {column pk is not unique}} | 
| +} {1 {UNIQUE constraint failed: t7.pk}} | 
| do_catchsql_test 5.4.4.3 { | 
| INSERT INTO t8 VALUES(2) | 
| -} {1 {column pk is not unique}} | 
| +} {1 {UNIQUE constraint failed: t8.pk}} | 
| do_catchsql_test 5.4.4.4 { | 
| INSERT INTO t9 VALUES(2) | 
| -} {1 {column pk is not unique}} | 
| +} {1 {UNIQUE constraint failed: t9.pk}} | 
|  | 
| # EVIDENCE-OF: R-56094-57830 the following three table declarations all | 
| # cause the column "x" to be an alias for the rowid (an integer primary | 
|  |