]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
If a column is both UNIQUE and a PRIMARY KEY, make sure the PRIMARY KEY
authordrh <drh@noemail.net>
Sat, 21 Mar 2015 02:58:20 +0000 (02:58 +0000)
committerdrh <drh@noemail.net>
Sat, 21 Mar 2015 02:58:20 +0000 (02:58 +0000)
designation takes precedence.

FossilOrigin-Name: d871a7921722bb0fef6d51e1110a9703ddff78c8

manifest
manifest.uuid
src/build.c
test/without_rowid6.test

index e2d910ce7068875a8c3b99928b3b519bff81abba..6b5b4743656013ab055cccfc78beee9610b00c21 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Remove\ssuperfluous\sdefine\sfrom\sthe\sMSVC\smakefile.
-D 2015-03-21T02:25:29.401
+C If\sa\scolumn\sis\sboth\sUNIQUE\sand\sa\sPRIMARY\sKEY,\smake\ssure\sthe\sPRIMARY\sKEY\ndesignation\stakes\sprecedence.
+D 2015-03-21T02:58:20.771
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 88a3e6261286db378fdffa1124cad11b3c05f5bb
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -176,7 +176,7 @@ F src/btmutex.c 45a968cc85afed9b5e6cf55bf1f42f8d18107f79
 F src/btree.c d4d52fb14e863cff9dbc7c746e9048ec0967a555
 F src/btree.h 969adc948e89e449220ff0ff724c94bb2a52e9f1
 F src/btreeInt.h 2bfefc01875d8da066504c233ec259fcb3b2ef72
-F src/build.c ba45ebd02904e84d98839a6ea74c3eb948596587
+F src/build.c 0419bba592c22f6d00e6d57a2ca7136720d02c1a
 F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0
 F src/complete.c 198a0066ba60ab06fc00fba1998d870a4d575463
 F src/ctime.c 98f89724adc891a1a4c655bee04e33e716e05887
@@ -1190,7 +1190,7 @@ F test/without_rowid2.test af260339f79d13cb220288b67cd287fbcf81ad99
 F test/without_rowid3.test 1081aabf60a1e1123b7f9a8f6ae19954351843b0
 F test/without_rowid4.test 4e08bcbaee0399f35d58b5581881e7a6243d458a
 F test/without_rowid5.test 61256715b686359df48ca1742db50cc7e3e7b862
-F test/without_rowid6.test deddb78ef539c355bddec00cdfaea6c56efd8b3f
+F test/without_rowid6.test db0dbf03c49030aa3c1ba5f618620334bd2baf5f
 F test/wordcount.c 9915e06cb33d8ca8109b8700791afe80d305afda
 F test/zeroblob.test caaecfb4f908f7bc086ed238668049f96774d688
 F test/zerodamage.test cf6748bad89553cc1632be51a6f54e487e4039ac
@@ -1246,7 +1246,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 737630b87314283b2c38790ace9d25ec05f81f4a
-R bbf7713d7bc160a26b464271593d133d
-U mistachkin
-Z d79979d0d3fded9d4339ee09acdaf62b
+P 880d2513a0fb084fae82080401b108fb13e61478
+R 705f61dec20eb9df7c2db39aa0eef35e
+U drh
+Z 19c081d9e2a5c29193a61d5955352cbc
index 81fc012beb5e7ec91ddc2947b3fa33f3c1ea4d69..46bb30739de61ced969c9928da88cf9f554e54b9 100644 (file)
@@ -1 +1 @@
-880d2513a0fb084fae82080401b108fb13e61478
\ No newline at end of file
+d871a7921722bb0fef6d51e1110a9703ddff78c8
\ No newline at end of file
index 54dd526b56d445934b8ca3a03931f282fd3b0f80..fcf96bd42c120a2fc59f27001b6ea3c7d84af41e 100644 (file)
@@ -3183,6 +3183,7 @@ Index *sqlite3CreateIndex(
             pIdx->onError = pIndex->onError;
           }
         }
+        pRet = pIdx;
         goto exit_create_index;
       }
     }
index e827ccab9015eff78839ab271e0386dca30743d4..8ca78ba63a981768667edbccac946c7c7801cf35 100644 (file)
@@ -37,5 +37,81 @@ do_execsql_test without_rowid6-140 {
   SELECT c FROM t1 ORDER BY b LIMIT 5;
 } {x1y x2y x3y x4y x5y}
 
+# Column t1.b starts out as a unique index, but that index is
+# subsequently converted into a PRIMARY KEY.
+#
+do_execsql_test without_rowid6-200 {
+  DROP TABLE IF EXISTS t1;
+  CREATE TABLE t1(
+    a UNIQUE,
+    b UNIQUE,
+    c UNIQUE,
+    PRIMARY KEY(b)
+  ) WITHOUT ROWID;
+  INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9);
+  SELECT a FROM t1 WHERE b>3 ORDER BY b;
+} {4 1}
+do_execsql_test without_rowid6-210 {
+  EXPLAIN QUERY PLAN
+  SELECT a FROM t1 WHERE b>3 ORDER BY b;
+} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../}
+do_execsql_test without_rowid6-220 {
+  PRAGMA index_list(t1);
+} {/sqlite_autoindex_t1_2 1 pk/}
+
+do_execsql_test without_rowid6-300 {
+  DROP TABLE IF EXISTS t1;
+  CREATE TABLE t1(
+    a UNIQUE,
+    b PRIMARY KEY,
+    c UNIQUE,
+    UNIQUE(b)
+  ) WITHOUT ROWID;
+  INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9);
+  SELECT a FROM t1 WHERE b>3 ORDER BY b;
+} {4 1}
+do_execsql_test without_rowid6-310 {
+  EXPLAIN QUERY PLAN
+  SELECT a FROM t1 WHERE b>3 ORDER BY b;
+} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../}
+do_execsql_test without_rowid6-320 {
+  PRAGMA index_list(t1);
+} {/sqlite_autoindex_t1_2 1 pk/}
+
+do_execsql_test without_rowid6-400 {
+  DROP TABLE IF EXISTS t1;
+  CREATE TABLE t1(
+    a UNIQUE,
+    b UNIQUE PRIMARY KEY,
+    c UNIQUE
+  ) WITHOUT ROWID;
+  INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9);
+  SELECT a FROM t1 WHERE b>3 ORDER BY b;
+} {4 1}
+do_execsql_test without_rowid6-410 {
+  EXPLAIN QUERY PLAN
+  SELECT a FROM t1 WHERE b>3 ORDER BY b;
+} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../}
+do_execsql_test without_rowid6-420 {
+  PRAGMA index_list(t1);
+} {/sqlite_autoindex_t1_2 1 pk/}
+
+do_execsql_test without_rowid6-500 {
+  DROP TABLE IF EXISTS t1;
+  CREATE TABLE t1(a,b,c,
+    UNIQUE(b,c),
+    PRIMARY KEY(b,c)
+  ) WITHOUT ROWID;
+  INSERT INTO t1(a,b,c) VALUES(1,8,3),(4,5,6),(7,2,9);
+  SELECT a FROM t1 WHERE b>3 ORDER BY b;
+} {4 1}
+do_execsql_test without_rowid6-510 {
+  EXPLAIN QUERY PLAN
+  SELECT a FROM t1 WHERE b>3 ORDER BY b;
+} {/SEARCH TABLE t1 USING PRIMARY KEY .b>../}
+do_execsql_test without_rowid6-520 {
+  PRAGMA index_list(t1);
+} {/sqlite_autoindex_t1_1 1 pk/}
+
 
 finish_test