]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix problems with INSERT INTO ... SELECT ... statements that write to tables with...
authordan <dan@noemail.net>
Thu, 19 Nov 2015 16:46:46 +0000 (16:46 +0000)
committerdan <dan@noemail.net>
Thu, 19 Nov 2015 16:46:46 +0000 (16:46 +0000)
FossilOrigin-Name: 59bd0ec7d4327852ee8c0206b2c59d0a12484db8

manifest
manifest.uuid
src/build.c
src/insert.c
src/select.c
src/sqliteInt.h
test/hidden.test

index e87f64889bf077c31481873886a4de2c5ee3ad95..5beeb22a5046b803c3d8a770e0743c82b301f612 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Create\sthe\snew\sTK_ASTERISK\stoken\sto\srepresent\sthe\s"*"\sin\s"SELECT\s*".\s\sFormerly\nthat\soperator\swas\sTK_ALL,\swhich\swas\salso\sused\sfor\sUNION\sALL.\s\sLess\sconfusion\sif\nthey\soperator\ssymbols\sare\sdistinct.
-D 2015-11-19T16:33:31.729
+C Fix\sproblems\swith\sINSERT\sINTO\s...\sSELECT\s...\sstatements\sthat\swrite\sto\stables\swith\s__hidden__\scolumns.
+D 2015-11-19T16:46:46.075
 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc e928e68168df69b353300ac87c10105206653a03
@@ -285,7 +285,7 @@ F src/btmutex.c 45a968cc85afed9b5e6cf55bf1f42f8d18107f79
 F src/btree.c d3bdd8462a86492e2ebc9aca4a0168429017de25
 F src/btree.h 2d76dee44704c47eed323356a758662724b674a0
 F src/btreeInt.h 3ab435ed27adea54d040584b0bcc488ee7db1e38
-F src/build.c c909d178ef900f56aaafa4a509fd1b12a7d52ea6
+F src/build.c 5a3b71786e2b96d2bb92d40f190eb1fe736f25ca
 F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0
 F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
 F src/ctime.c 509ef9c64d1321f42448f111da86400b1799218a
@@ -300,7 +300,7 @@ F src/global.c 508e4087f7b41d688e4762dcf4d4fe28cfbc87f9
 F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
 F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
 F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
-F src/insert.c 7aa0846b25ab53e33a16fc3b9417ff87b3c60183
+F src/insert.c edb295a0b669e2dedba65cd546789770ae061277
 F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
 F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e
 F src/loadext.c 18586e45a215325f15096821e9c082035d4fb810
@@ -339,12 +339,12 @@ F src/printf.c f8fc8f04e75b1e983ef2793c27ec7a43b287e94a
 F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
 F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91
 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
-F src/select.c e8eccb5b4482965f56fc46c69e75ce2da941b18e
+F src/select.c 3492a2794b8ff04dce2a91a284492df5725045f5
 F src/shell.c f0f59ea60ad297f671b7ae0fb957a736ad17c92c
 F src/sqlite.h.in fa62718f73553f06b2f2e362fd09ccb4e1cbb626
 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
 F src/sqlite3ext.h 4b66e3e3435da4b4c8c83696d0349f0c503b3924
-F src/sqliteInt.h 339067553cebac9ba7ec0c616b135db7905c20c9
+F src/sqliteInt.h 921678cb43bb7f63364e56757c07f3e6e0eb45c6
 F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
 F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
 F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
@@ -762,7 +762,7 @@ F test/fuzzer1.test d4c52aaf3ef923da293a2653cfab33d02f718a36
 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536
 F test/genesis.tcl 1e2e2e8e5cc4058549a154ff1892fe5c9de19f98
 F test/hexlit.test 1d312fa816dfd3650a3bb488093bc09a0c927f67
-F test/hidden.test 9de6b1631ac23b27801868abaccd1a7f3e96a6f2
+F test/hidden.test df1540ad1017b49a0681ba3b01e0cde051dbeb58
 F test/hook.test 162d7cef7a2d2b04839fe14402934e6a1b79442f
 F test/icu.test 70df4faca133254c042d02ae342c0a141f2663f4
 F test/ieee754.test 118b665a97a8df0e8f2fbdb07d113e596f4a6b53
@@ -1404,7 +1404,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 011904cad2be2ce34e2f37ffae8ff2f1044a2969
-R 40ad63765b750992e100464bfa82981f
-U drh
-Z 1545ad0787e026d6592cfaa98e731337
+P 201ac6d449431dadc6b29faecd68b559bd64bc9f
+R 1ed430a49a13a08f14d4334a2efebccc
+U dan
+Z 390e482d41754a020737571e763bbfaa
index 7707d8b725c71f4c8b97a863c11d7b12bae6186e..44fcfa5cdd413eff871f2490912b174f80f095f2 100644 (file)
@@ -1 +1 @@
-201ac6d449431dadc6b29faecd68b559bd64bc9f
\ No newline at end of file
+59bd0ec7d4327852ee8c0206b2c59d0a12484db8
\ No newline at end of file
index 0e8d4cf0ea828cbc91b0ea91864b422964b80036..f928ba3075d776fd86590e4700ad739164bfcf83 100644 (file)
@@ -1052,10 +1052,12 @@ begin_table_error:
 /* Set properties of a table column based on the (magical)
 ** name of the column.
 */
-void sqlite3ColumnPropertiesFromName(Column *pCol){
+void sqlite3ColumnPropertiesFromName(Table *pTab, Column *pCol){
 #if SQLITE_ENABLE_HIDDEN_COLUMNS
   if( sqlite3_strnicmp(pCol->zName, "__hidden__", 10)==0 ){
     pCol->colFlags |= COLFLAG_HIDDEN;
+  }else if( pTab && pCol!=pTab->aCol && (pCol[-1].colFlags & COLFLAG_HIDDEN) ){
+    pTab->tabFlags |= TF_OOOHidden;
   }
 #endif
 }
@@ -1103,7 +1105,7 @@ void sqlite3AddColumn(Parse *pParse, Token *pName){
   pCol = &p->aCol[p->nCol];
   memset(pCol, 0, sizeof(p->aCol[0]));
   pCol->zName = z;
-  sqlite3ColumnPropertiesFromName(pCol);
+  sqlite3ColumnPropertiesFromName(p, pCol);
  
   /* If there is no type specified, columns have the default affinity
   ** 'BLOB'. If there is a type specified, then sqlite3AddColumnType() will
index 618b2dee7bc435ae384bef1ac9ceb24084979901..4b8ed2210632137cefe5f5613b5bee2bbfd860c6 100644 (file)
@@ -1909,6 +1909,11 @@ static int xferOptimization(
   for(i=0; i<pDest->nCol; i++){
     Column *pDestCol = &pDest->aCol[i];
     Column *pSrcCol = &pSrc->aCol[i];
+#ifdef SQLITE_ENABLE_HIDDEN_COLUMNS
+    if( (pDestCol->colFlags | pSrcCol->colFlags) & COLFLAG_HIDDEN ){
+      return 0;    /* Neither table may have __hidden__ columns */
+    }
+#endif
     if( pDestCol->affinity!=pSrcCol->affinity ){
       return 0;    /* Affinity must be the same on all columns */
     }
index 2cf190b34c5e5279676dbb5fc13261f817c38aa1..967023420cee41641f34f025d9d89a77ba71d703 100644 (file)
@@ -1659,7 +1659,7 @@ int sqlite3ColumnsFromExprList(
       if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt);
     }
     pCol->zName = zName;
-    sqlite3ColumnPropertiesFromName(pCol);
+    sqlite3ColumnPropertiesFromName(0, pCol);
     if( zName && sqlite3HashInsert(&ht, zName, pCol)==pCol ){
       db->mallocFailed = 1;
     }
index 788b348fbd56808be854a0cb493a43a65fd4d095..50a0c97eb067bd602a09c4872395eb783496add1 100644 (file)
@@ -3331,7 +3331,7 @@ void sqlite3OpenMasterTable(Parse *, int);
 Index *sqlite3PrimaryKeyIndex(Table*);
 i16 sqlite3ColumnOfIndex(Index*, i16);
 void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int);
-void sqlite3ColumnPropertiesFromName(Column*);
+void sqlite3ColumnPropertiesFromName(Table*, Column*);
 void sqlite3AddColumn(Parse*,Token*);
 void sqlite3AddNotNull(Parse*, int);
 void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int);
index 07a370c4a5a66f733b7165feb50e68026dd36a86..9914a6ed10892b93d49ad3210577ed918074d5d1 100644 (file)
@@ -70,5 +70,32 @@ foreach {tn view} {
     SELECT * FROM x1;
   } {1 2 3 4 5 {} 7 8 9}
 }
-  
+
+#-------------------------------------------------------------------------
+# Test INSERT INTO ... SELECT ... statements that write to tables with
+# hidden columns.
+#
+do_execsql_test 3.1 {
+  CREATE TABLE t4(a, __hidden__b, c);
+  INSERT INTO t4 SELECT 1, 2;
+  SELECT a, __hidden__b, c FROM t4;
+} {1 {} 2}
+
+do_execsql_test 3.2.1 {
+  CREATE TABLE t5(__hidden__a, b, c);
+  CREATE TABLE t6(__hidden__a, b, c);
+  INSERT INTO t6(__hidden__a, b, c) VALUES(1, 2, 3);
+  INSERT INTO t6(__hidden__a, b, c) VALUES(4, 5, 6);
+  INSERT INTO t6(__hidden__a, b, c) VALUES(7, 8, 9);
+}
+
+do_execsql_test 3.2.2 {
+  INSERT INTO t5 SELECT * FROM t6;
+  SELECT * FROM t5;
+} {2 3   5 6   8 9}
+
+do_execsql_test 3.2.3 {
+  SELECT __hidden__a FROM t5;
+} {{} {} {}}
+
 finish_test