]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Only support the magic "__hidden__" column name prefix interpretation when hidden-columns-in-tables
authordrh <drh@noemail.net>
Thu, 19 Nov 2015 13:53:57 +0000 (13:53 +0000)
committerdrh <drh@noemail.net>
Thu, 19 Nov 2015 13:53:57 +0000 (13:53 +0000)
compiled with SQLITE_ENABLE_HIDDEN_COLUMNS.

FossilOrigin-Name: 5490646b2eb74ea8bd5ab2690f69b9c707a0165f

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

index 856258b350f65a673715234992c5ae6bf15d1565..8fd60806d433c0afb3034df3d604a25ef21649bd 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Get\sthe\s__hidden__\scolumn\smechanism\sworking\son\sviews\swith\sINSTEAD\sOF\striggers.
-D 2015-11-18T21:22:02.852
+C Only\ssupport\sthe\smagic\s"__hidden__"\scolumn\sname\sprefix\sinterpretation\swhen\ncompiled\swith\sSQLITE_ENABLE_HIDDEN_COLUMNS.
+D 2015-11-19T13:53:57.338
 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 a62cef335439eca53f8b0b12fae4b6925ff5b980
+F src/build.c c67e12bdafb58983175b22c889610ee32c187115
 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 0cf9a847a0a03b4fe932f1adfa69165802d5250b
+F src/insert.c 6677454f256e7992c68a6460b0224a7ec60ef5ed
 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 7996cf4b5730e80dd44a080019736e70eaef4377
+F src/select.c ac980e5b70478aab235d12b4565a745814453858
 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 1b8c1b37f0bd2cec784c9f257e449f72096b37f8
+F src/sqliteInt.h 339067553cebac9ba7ec0c616b135db7905c20c9
 F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
 F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
 F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
@@ -363,7 +363,7 @@ F src/test_autoext.c dea8a01a7153b9adc97bd26161e4226329546e12
 F src/test_backup.c 2e6e6a081870150f20c526a2e9d0d29cda47d803
 F src/test_blob.c e5a7a81d61a780da79101aeb1e60d300af169e07
 F src/test_btree.c 2e9978eca99a9a4bfa8cae949efb00886860a64f
-F src/test_config.c 7523f8bd7604aec88a9d1c303d93c925bcfcc9f9
+F src/test_config.c f2824de39f59d8d621e2d6ec5cc67006d000b2eb
 F src/test_demovfs.c 0de72c2c89551629f58486fde5734b7d90758852
 F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
 F src/test_fs.c ced436e3d4b8e4681328409b8081051ce614e28f
@@ -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 e8c7623994991db181310fc876e16a0c27156a3d
+F test/hidden.test 9de6b1631ac23b27801868abaccd1a7f3e96a6f2
 F test/hook.test 162d7cef7a2d2b04839fe14402934e6a1b79442f
 F test/icu.test 70df4faca133254c042d02ae342c0a141f2663f4
 F test/ieee754.test 118b665a97a8df0e8f2fbdb07d113e596f4a6b53
@@ -950,7 +950,7 @@ F test/rbu.test 168573d353cd0fd10196b87b0caa322c144ef736
 F test/rdonly.test 64e2696c322e3538df0b1ed624e21f9a23ed9ff8
 F test/regexp1.test 497ea812f264d12b6198d6e50a76be4a1973a9d8
 F test/reindex.test 44edd3966b474468b823d481eafef0c305022254
-F test/releasetest.tcl 30cf0851a6fb0343b65f27dc89ab7bed3c3cc77d
+F test/releasetest.tcl 622f2381b217facdf429584a5c292cc1fc47e7c0
 F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb
 F test/rollback.test 458fe73eb3ffdfdf9f6ba3e9b7350a6220414dea
 F test/rollback2.test fc14cf6d1a2b250d2735ef16124b971bce152f14
@@ -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 27d4b6f5756c7b19c00c95d46a77280c8b6f03a4
-R d79a926a0045cbb3f30ec72ca51f379c
+P 20c1e9ce75cc0b5f7456379f35a4fe24edd98088
+R b681b2e3a18e987eaa1eccff39189bf0
 U drh
-Z c4fa45b9d058451cddc1ea846764a52e
+Z 0c3369445e405737c5be7849ea75e5f3
index f5b8db47ca7e91d1d3c8c02749c2b23f97befc17..0201a434ee3118cd295a1ef3b860003f493129be 100644 (file)
@@ -1 +1 @@
-20c1e9ce75cc0b5f7456379f35a4fe24edd98088
\ No newline at end of file
+5490646b2eb74ea8bd5ab2690f69b9c707a0165f
\ No newline at end of file
index 9a4a0cc8d4f62a19171aebe8c4b13e1cc3cc5cfc..65f94d2348adab980e6fbf9699f1ed5779243b8b 100644 (file)
@@ -1049,6 +1049,18 @@ begin_table_error:
   return;
 }
 
+/* Set properties of a table column based on the (magical)
+** name of the column.
+*/
+void sqlite3ColumnPropertiesFromName(Column *pCol){
+#if SQLITE_ENABLE_HIDDEN_COLUMNS
+  if( sqlite3_strnicmp(pCol->zName, "__hidden__", 10)==0 ){
+    pCol->colFlags |= COLFLAG_HIDDEN;
+  }
+#endif
+}
+
+
 /*
 ** This macro is used to compare two strings in a case-insensitive manner.
 ** It is slightly faster than calling sqlite3StrICmp() directly, but
@@ -1104,9 +1116,7 @@ void sqlite3AddColumn(Parse *pParse, Token *pName){
   pCol = &p->aCol[p->nCol];
   memset(pCol, 0, sizeof(p->aCol[0]));
   pCol->zName = z;
-  if( sqlite3_strnicmp(z, "__hidden__", 10)==0 ){
-    pCol->colFlags |= COLFLAG_HIDDEN;
-  }
+  sqlite3ColumnPropertiesFromName(pCol);
  
   /* If there is no type specified, columns have the default affinity
   ** 'BLOB'. If there is a type specified, then sqlite3AddColumnType() will
index aa3eb91114c0092e076ea745b932dc7aee14f683..d1226ee276e751bdc0e7bdb060136e6e57a8192a 100644 (file)
@@ -840,7 +840,7 @@ void sqlite3Insert(
         }
       }
       if( (!useTempTable && !pList) || (pColumn && j>=pColumn->nId)
-            || (pColumn==0 && IsHiddenColumn(&pTab->aCol[i])) ){
+            || (pColumn==0 && IsOrdinaryHiddenColumn(&pTab->aCol[i])) ){
         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regCols+i+1);
       }else if( useTempTable ){
         sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, regCols+i+1); 
@@ -848,7 +848,7 @@ void sqlite3Insert(
         assert( pSelect==0 ); /* Otherwise useTempTable is true */
         sqlite3ExprCodeAndCache(pParse, pList->a[j].pExpr, regCols+i+1);
       }
-      if( pColumn==0 && !IsHiddenColumn(&pTab->aCol[i]) ) j++;
+      if( pColumn==0 && !IsOrdinaryHiddenColumn(&pTab->aCol[i]) ) j++;
     }
 
     /* If this is an INSERT on a view with an INSTEAD OF INSERT trigger,
@@ -932,8 +932,6 @@ void sqlite3Insert(
       }
       if( pColumn==0 ){
         if( IsHiddenColumn(&pTab->aCol[i]) ){
-          assert( IsVirtual(pTab)
-                || sqlite3_strnicmp(pTab->aCol[i].zName,"__hidden__",10)==0 );
           j = -1;
           nHidden++;
         }else{
index f2ea26eaf2505acac4011d4c3dfb91fdd5eef509..793171f93cc63f346347a6b7a7d08c24226e75fc 100644 (file)
@@ -1659,12 +1659,9 @@ int sqlite3ColumnsFromExprList(
       if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt);
     }
     pCol->zName = zName;
-    if( zName ){
-      if( sqlite3HashInsert(&ht, zName, pCol)==pCol ){
-        db->mallocFailed = 1;
-      }else if( sqlite3_strnicmp(zName, "__hidden__", 10)==0 ){
-        pCol->colFlags |= COLFLAG_HIDDEN;
-      }
+    sqlite3ColumnPropertiesFromName(pCol);
+    if( zName && sqlite3HashInsert(&ht, zName, pCol)==pCol ){
+      db->mallocFailed = 1;
     }
   }
   sqlite3HashClear(&ht);
@@ -4364,13 +4361,10 @@ static int selectExpander(Walker *pWalker, Select *p){
               continue;
             }
 
-            /* If a column is marked as 'hidden' (currently only possible
-            ** for virtual tables), do not include it in the expanded
-            ** result-set list.
+            /* If a column is marked as 'hidden', do not include it in
+            ** the expanded result-set list.
             */
             if( IsHiddenColumn(&pTab->aCol[j]) ){
-              assert( IsVirtual(pTab)
-               || sqlite3_strnicmp(pTab->aCol[j].zName,"__hidden__", 10)==0 );
               continue;
             }
             tableSeen = 1;
index 0a1eb770f733f7e25cb4dca24468d3f679e30516..788b348fbd56808be854a0cb493a43a65fd4d095 100644 (file)
@@ -1696,12 +1696,29 @@ struct Table {
 */
 #ifndef SQLITE_OMIT_VIRTUALTABLE
 #  define IsVirtual(X)      (((X)->tabFlags & TF_Virtual)!=0)
-#  define IsHiddenColumn(X) (((X)->colFlags & COLFLAG_HIDDEN)!=0)
 #else
 #  define IsVirtual(X)      0
 #  define IsHiddenColumn(X) 0
 #endif
 
+/*
+** Macros to determine if a column is hidden.  IsOrdinaryHiddenColumn()
+** only works for non-virtual tables (ordinary tables and views) and is
+** always false unless SQLITE_ENABLE_HIDDEN_COLUMNS is defined.  The
+** IsHiddenColumn() macro is general purpose.
+*/
+#if defined(SQLITE_ENABLE_HIDDEN_COLUMNS)
+#  define IsHiddenColumn(X)         (((X)->colFlags & COLFLAG_HIDDEN)!=0)
+#  define IsOrdinaryHiddenColumn(X) (((X)->colFlags & COLFLAG_HIDDEN)!=0)
+#elif !defined(SQLITE_OMIT_VIRTUAL)
+#  define IsHiddenColumn(X)         (((X)->colFlags & COLFLAG_HIDDEN)!=0)
+#  define IsOrdinaryHiddenColumn(X) 0
+#else
+#  define IsHiddenColumn(X)         0
+#  define IsOrdinaryHiddenColumn(X) 0
+#endif
+
+
 /* Does the table have a rowid */
 #define HasRowid(X)     (((X)->tabFlags & TF_WithoutRowid)==0)
 #define VisibleRowid(X) (((X)->tabFlags & TF_NoVisibleRowid)==0)
@@ -3314,6 +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 sqlite3AddColumn(Parse*,Token*);
 void sqlite3AddNotNull(Parse*, int);
 void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int);
index 4cb5c0057ad4a522382d062d2effc9deb8773e59..b84424bbdca70e4a5cde3b1855b0b7bc38afcba2 100644 (file)
@@ -125,6 +125,12 @@ static void set_options(Tcl_Interp *interp){
   Tcl_SetVar2(interp, "sqlite_options", "cursorhints", "0", TCL_GLOBAL_ONLY);
 #endif
 
+#ifdef SQLITE_ENABLE_HIDDEN_COLUMNS
+  Tcl_SetVar2(interp, "sqlite_options", "hiddencolumns", "1", TCL_GLOBAL_ONLY);
+#else
+  Tcl_SetVar2(interp, "sqlite_options", "hiddencolumns", "0", TCL_GLOBAL_ONLY);
+#endif
+
 #ifdef SQLITE_ENABLE_MEMSYS3
   Tcl_SetVar2(interp, "sqlite_options", "mem3", "1", TCL_GLOBAL_ONLY);
 #else
index a9664f0e491bf1e9b140d18a31e468d56d1c00a1..07a370c4a5a66f733b7165feb50e68026dd36a86 100644 (file)
@@ -16,6 +16,11 @@ set testdir [file dirname $argv0]
 source $testdir/tester.tcl
 set testprefix hidden
 
+ifcapable !hiddencolumns {
+  finish_test
+  return
+}
+
 do_execsql_test 1.1 {
   CREATE TABLE t1(__hidden__a, b);
   INSERT INTO t1 VALUES('1');
@@ -65,9 +70,5 @@ foreach {tn view} {
     SELECT * FROM x1;
   } {1 2 3 4 5 {} 7 8 9}
 }
-
-
-
-
   
 finish_test
index f9c4406d40da2c09de8f794ded106685c88556d8..7f53fd1523bebe228a7dde8a1aa102d5c504fc03 100644 (file)
@@ -119,6 +119,7 @@ array set ::Configs [strip_comments {
     -DSQLITE_ENABLE_MEMSYS3=1
     -DSQLITE_ENABLE_COLUMN_METADATA=1
     -DSQLITE_ENABLE_STAT4
+    -DSQLITE_ENABLE_HIDDEN_COLUMNS
     -DSQLITE_MAX_ATTACHED=125
   }
   "Fast-One" {
@@ -145,6 +146,7 @@ array set ::Configs [strip_comments {
     -DSQLITE_OMIT_LOAD_EXTENSION=1
     -DSQLITE_OMIT_PROGRESS_CALLBACK=1
     -DSQLITE_OMIT_VIRTUALTABLE=1
+    -DSQLITE_ENABLE_HIDDEN_COLUMNS
     -DSQLITE_TEMP_STORE=3
     --enable-json1
   }
@@ -213,6 +215,7 @@ array set ::Configs [strip_comments {
     -DSQLITE_ENABLE_STAT4
     -DSQLITE_ENABLE_FTS4
     -DSQLITE_ENABLE_RTREE
+    -DSQLITE_ENABLE_HIDDEN_COLUMNS
     --enable-json1
   }