From 29fbdb731bf395f99876aedde8c839059462c1ff Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 13 Nov 2015 12:32:01 +0000 Subject: [PATCH 01/27] Disable two PRAGMA cache_spill tests when MEMORY_MANAGEMENT is enabled. FossilOrigin-Name: ebda77aad4d964593606ded2fdb19259ef9ebb8e --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/pragma2.test | 42 ++++++++++++++++++++++-------------------- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/manifest b/manifest index 58eb701cc2..85e6bda4c2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Change\sthe\serror\smessages\sso\sthat\sthey\sbegin\scan\sbe\sgrepped\susing\s'^!'\sinstead\nof\s'^\s'.\s\sThere\sare\sfar\stoo\smany\sextraneous\soutputs\sthat\sbeing\swith\sa\sspace. -D 2015-11-13T00:03:14.576 +C Disable\stwo\sPRAGMA\scache_spill\stests\swhen\sMEMORY_MANAGEMENT\sis\senabled. +D 2015-11-13T12:32:01.756 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -931,7 +931,7 @@ F test/pcache2.test af7f3deb1a819f77a6d0d81534e97d1cf62cd442 F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff F test/permutations.test 4ea119731c62d2f7d0aa86dd5b184cbb61ca411b F test/pragma.test a44253f911e7d50127d4a08f927f47c861a4c772 -F test/pragma2.test 1a4cc20b0cd8fc6411bd2f828cdc3ea1bdd570b9 +F test/pragma2.test 00065068eeab2d15ea55465ec0f1e0a70e2c369e F test/pragma3.test 6f849ccffeee7e496d2f2b5e74152306c0b8757c F test/printf.test b3ff34e73d59124140eaf89f7672e21bc2ca5fcc F test/printf2.test 0b61566dd1c0f0b802f59dffa228c5dc5aa6b054 @@ -1403,7 +1403,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 ee6f2feec7d777a969ddba6dc00fb571d64e57f8 -R 408d324b4f8f857ba19128e8367a34ed +P 367ec0db49607559960d58891771113c205fd951 +R 9ab8fd3363ba53b73551ba52840dbe48 U drh -Z 9a6642a6fe3dd67383802a321d24cffd +Z d2f99c38ca17fe2dc0162f34e1b5cb9f diff --git a/manifest.uuid b/manifest.uuid index ca4e35f2cf..934b26d4d5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -367ec0db49607559960d58891771113c205fd951 \ No newline at end of file +ebda77aad4d964593606ded2fdb19259ef9ebb8e \ No newline at end of file diff --git a/test/pragma2.test b/test/pragma2.test index c8d87663c1..64b396bd1f 100644 --- a/test/pragma2.test +++ b/test/pragma2.test @@ -200,26 +200,28 @@ do_test pragma2-4.5.2 { PRAGMA lock_status; } } {100000 main reserved temp unknown} ;# Big spill threshold -> no excl lock -do_test pragma2-4.5.3 { - db eval { - ROLLBACK; - PRAGMA cache_spill=25; - PRAGMA main.cache_spill; - BEGIN; - UPDATE t1 SET c=c+1; - PRAGMA lock_status; - } -} {50 main exclusive temp unknown} ;# Small cache spill -> exclusive lock -do_test pragma2-4.5.4 { - db eval { - ROLLBACK; - PRAGMA cache_spill(-25); - PRAGMA main.cache_spill; - BEGIN; - UPDATE t1 SET c=c+1; - PRAGMA lock_status; - } -} {50 main exclusive temp unknown} ;# Small cache spill -> exclusive lock +ifcapable !memorymanage { + do_test pragma2-4.5.3 { + db eval { + ROLLBACK; + PRAGMA cache_spill=25; + PRAGMA main.cache_spill; + BEGIN; + UPDATE t1 SET c=c+1; + PRAGMA lock_status; + } + } {50 main exclusive temp unknown} ;# Small cache spill -> exclusive lock + do_test pragma2-4.5.4 { + db eval { + ROLLBACK; + PRAGMA cache_spill(-25); + PRAGMA main.cache_spill; + BEGIN; + UPDATE t1 SET c=c+1; + PRAGMA lock_status; + } + } {50 main exclusive temp unknown} ;# Small cache spill -> exclusive lock +} # Verify that newly attached databases inherit the cache_spill=OFF From d63fbb71033ca228c2dd8c1dec113cd2289e0d37 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 13 Nov 2015 12:52:34 +0000 Subject: [PATCH 02/27] Fix the releasetest-out.txt log output from releasetest.tcl so that it works when the --jobs option is used. FossilOrigin-Name: 6bb314a5022c8bae63f6cdb48652915e05c06a38 --- manifest | 12 ++++---- manifest.uuid | 2 +- test/releasetest.tcl | 65 ++++++++++++++++++++++++++++---------------- 3 files changed, 48 insertions(+), 31 deletions(-) diff --git a/manifest b/manifest index 85e6bda4c2..972db47b4f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Disable\stwo\sPRAGMA\scache_spill\stests\swhen\sMEMORY_MANAGEMENT\sis\senabled. -D 2015-11-13T12:32:01.756 +C Fix\sthe\sreleasetest-out.txt\slog\soutput\sfrom\sreleasetest.tcl\sso\sthat\sit\sworks\nwhen\sthe\s--jobs\soption\sis\sused. +D 2015-11-13T12:52:34.131 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -949,7 +949,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 2d000ceded3115758be96abb9c10a5669fb27862 +F test/releasetest.tcl 59a3682dbfddb141c86c7d0fc407155a5517a1db F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb F test/rollback.test 458fe73eb3ffdfdf9f6ba3e9b7350a6220414dea F test/rollback2.test fc14cf6d1a2b250d2735ef16124b971bce152f14 @@ -1403,7 +1403,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 367ec0db49607559960d58891771113c205fd951 -R 9ab8fd3363ba53b73551ba52840dbe48 +P ebda77aad4d964593606ded2fdb19259ef9ebb8e +R 0d2c22d081ef129ebfad482569c607ff U drh -Z d2f99c38ca17fe2dc0162f34e1b5cb9f +Z 0f5445a085b6cf791e190a6c97d0a451 diff --git a/manifest.uuid b/manifest.uuid index 934b26d4d5..d171197a9c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ebda77aad4d964593606ded2fdb19259ef9ebb8e \ No newline at end of file +6bb314a5022c8bae63f6cdb48652915e05c06a38 \ No newline at end of file diff --git a/test/releasetest.tcl b/test/releasetest.tcl index 2e67aabae2..f49d0b27bd 100644 --- a/test/releasetest.tcl +++ b/test/releasetest.tcl @@ -306,22 +306,39 @@ foreach {key value} [array get ::Platforms] { } } -# Output log +# Output log. Disabled for slave interpreters. # -set LOG [open releasetest-out.txt w] -proc PUTS {args} { - if {[llength $args]==2} { - puts [lindex $args 0] [lindex $args 1] - puts $::LOG [lindex $args 1] - } else { - puts [lindex $args 0] - puts $::LOG [lindex $args 0] +if {[lindex $argv end]!="--slave"} { + set LOG [open releasetest-out.txt w] + proc PUTS {txt} { + puts $txt + puts $::LOG $txt + flush $::LOG + } + proc PUTSNNL {txt} { + puts -nonewline $txt + puts -nonewline $::LOG $txt + flush $::LOG + } + proc PUTSERR {txt} { + puts stderr $txt + puts $::LOG $txt + flush $::LOG + } + puts $LOG "$argv0 $argv" + set tm0 [clock format [clock seconds] -format {%Y-%m-%d %H:%M:%S} -gmt 1] + puts $LOG "start-time: $tm0 UTC" +} else { + proc PUTS {txt} { + puts $txt + } + proc PUTSNNL {txt} { + puts -nonewline $txt + } + proc PUTSERR {txt} { + puts stderr $txt } - flush $::LOG } -puts $LOG "$argv0 $argv" -set tm0 [clock format [clock seconds] -format {%Y-%m-%d %H:%M:%S} -gmt 1] -puts $LOG "start-time: $tm0 UTC" # Open the file $logfile and look for a report on the number of errors # and the number of test cases run. Add these values to the global @@ -809,8 +826,8 @@ proc process_options {argv} { } default { - PUTS stderr "" - PUTS stderr [string trim $::USAGE_MESSAGE] + PUTSERR stderr "" + PUTSERR stderr [string trim $::USAGE_MESSAGE] exit -1 } } @@ -818,7 +835,7 @@ proc process_options {argv} { if {0==[info exists ::Platforms($platform)]} { PUTS "Unknown platform: $platform" - PUTS -nonewline "Set the -platform option to " + PUTSNNL "Set the -platform option to " set print [list] foreach p [array names ::Platforms] { lappend print "\"$p\"" @@ -844,16 +861,16 @@ proc process_options {argv} { } PUTS "Running the following test configurations for $platform:" PUTS " [string trim $::CONFIGLIST]" - PUTS -nonewline "Flags:" - if {$::PROGRESS_MSGS} {PUTS -nonewline " --progress"} - if {$::DRYRUN} {PUTS -nonewline " --dryrun"} - if {$::BUILDONLY} {PUTS -nonewline " --buildonly"} - if {$::MSVC} {PUTS -nonewline " --msvc"} + PUTSNNL "Flags:" + if {$::PROGRESS_MSGS} {PUTSNNL " --progress"} + if {$::DRYRUN} {PUTSNNL " --dryrun"} + if {$::BUILDONLY} {PUTSNNL " --buildonly"} + if {$::MSVC} {PUTSNNL " --msvc"} switch -- $::QUICK { - 1 {PUTS -nonewline " --quick"} - 2 {PUTS -nonewline " --veryquick"} + 1 {PUTSNNL " --quick"} + 2 {PUTSNNL " --veryquick"} } - if {$::JOBS>1} {PUTS -nonewline " --jobs $::JOBS"} + if {$::JOBS>1} {PUTSNNL " --jobs $::JOBS"} PUTS "" } From 05d4ebf6c3652eda096ceddd755db37d89ebca41 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 13 Nov 2015 13:15:42 +0000 Subject: [PATCH 03/27] Add the --transaction option to the sqldiff tool. FossilOrigin-Name: 8882d1f3ef0fc53d7c19918c3af43c5bdd79e88f --- manifest | 12 ++++++------ manifest.uuid | 2 +- tool/sqldiff.c | 10 ++++++++++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 972db47b4f..ddb0e9ebc3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\sreleasetest-out.txt\slog\soutput\sfrom\sreleasetest.tcl\sso\sthat\sit\sworks\nwhen\sthe\s--jobs\soption\sis\sused. -D 2015-11-13T12:52:34.131 +C Add\sthe\s--transaction\soption\sto\sthe\ssqldiff\stool. +D 2015-11-13T13:15:42.017 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -1392,7 +1392,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c -F tool/sqldiff.c 40e3458f0015290be8ecb6e03f9dbf1bb1e264c0 +F tool/sqldiff.c db1232df457fdd4cbf2a919a497fc44bb18fb933 F tool/stack_usage.tcl f8e71b92cdb099a147dad572375595eae55eca43 F tool/symbols-mingw.sh 4dbcea7e74768305384c9fd2ed2b41bbf9f0414d F tool/symbols.sh fec58532668296d7c7dc48be9c87f75ccdb5814f @@ -1403,7 +1403,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 ebda77aad4d964593606ded2fdb19259ef9ebb8e -R 0d2c22d081ef129ebfad482569c607ff +P 6bb314a5022c8bae63f6cdb48652915e05c06a38 +R 935905eff9b6be5b31cdb25ab8246ccb U drh -Z 0f5445a085b6cf791e190a6c97d0a451 +Z 6be4f9e3d294b71573d3af5237a10dc6 diff --git a/manifest.uuid b/manifest.uuid index d171197a9c..e84e61c770 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6bb314a5022c8bae63f6cdb48652915e05c06a38 \ No newline at end of file +8882d1f3ef0fc53d7c19918c3af43c5bdd79e88f \ No newline at end of file diff --git a/tool/sqldiff.c b/tool/sqldiff.c index 90a53fe16a..0f406d8a03 100644 --- a/tool/sqldiff.c +++ b/tool/sqldiff.c @@ -1741,6 +1741,7 @@ static void showHelp(void){ " --schema Show only differences in the schema\n" " --summary Show only a summary of the differences\n" " --table TAB Show only differences in table TAB\n" +" --transaction Show SQL output inside a transaction\n" ); } @@ -1757,6 +1758,8 @@ int main(int argc, char **argv){ void (*xDiff)(const char*,FILE*) = diff_one_table; int nExt = 0; char **azExt = 0; + int useTransaction = 0; + int neverUseTransaction = 0; g.zArgv0 = argv[0]; sqlite3_config(SQLITE_CONFIG_SINGLETHREAD); @@ -1770,6 +1773,7 @@ int main(int argc, char **argv){ out = fopen(argv[++i], "wb"); if( out==0 ) cmdlineError("cannot open: %s", argv[i]); xDiff = changeset_one_table; + neverUseTransaction = 1; }else if( strcmp(z,"debug")==0 ){ if( i==argc-1 ) cmdlineError("missing argument to %s", argv[i]); @@ -1803,6 +1807,9 @@ int main(int argc, char **argv){ if( i==argc-1 ) cmdlineError("missing argument to %s", argv[i]); zTab = argv[++i]; }else + if( strcmp(z,"transaction")==0 ){ + useTransaction = 1; + }else { cmdlineError("unknown option: %s", argv[i]); } @@ -1845,6 +1852,8 @@ int main(int argc, char **argv){ cmdlineError("\"%s\" does not appear to be a valid SQLite database", zDb2); } + if( neverUseTransaction ) useTransaction = 0; + if( useTransaction ) printf("BEGIN TRANSACTION;\n"); if( zTab ){ xDiff(zTab, out); }else{ @@ -1862,6 +1871,7 @@ int main(int argc, char **argv){ } sqlite3_finalize(pStmt); } + if( useTransaction ) printf("COMMIT;\n"); /* TBD: Handle trigger differences */ /* TBD: Handle view differences */ From ce6cbf9ff45002a4b2e5c5a974e55d3244a6448c Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 13 Nov 2015 16:59:00 +0000 Subject: [PATCH 04/27] Add the "--enable-static-shell" option to the amalgamation autoconf script. If set (the default) the compiled shell tool is statically linked against sqlite3.o. Otherwise, it is linked against libsqlite3.so. FossilOrigin-Name: 499a02a34316cada9e197ef1d2e77c4cd75c41be --- autoconf/Makefile.am | 6 ++++-- autoconf/configure.ac | 17 +++++++++++++++++ manifest | 16 ++++++++-------- manifest.uuid | 2 +- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/autoconf/Makefile.am b/autoconf/Makefile.am index 5b7c4a090a..eed3ba41cb 100644 --- a/autoconf/Makefile.am +++ b/autoconf/Makefile.am @@ -6,8 +6,10 @@ libsqlite3_la_SOURCES = sqlite3.c libsqlite3_la_LDFLAGS = -no-undefined -version-info 8:6:8 bin_PROGRAMS = sqlite3 -sqlite3_SOURCES = shell.c sqlite3.c sqlite3.h -sqlite3_LDADD = @READLINE_LIBS@ +sqlite3_SOURCES = shell.c sqlite3.h +EXTRA_sqlite3_SOURCES = sqlite3.c +sqlite3_LDADD = @EXTRA_SHELL_OBJ@ @READLINE_LIBS@ +sqlite3_DEPENDENCIES = @EXTRA_SHELL_OBJ@ sqlite3_CFLAGS = $(AM_CFLAGS) include_HEADERS = sqlite3.h sqlite3ext.h diff --git a/autoconf/configure.ac b/autoconf/configure.ac index 7812927557..e03dfe289b 100644 --- a/autoconf/configure.ac +++ b/autoconf/configure.ac @@ -4,6 +4,8 @@ # # --enable-threadsafe # --enable-readline +# --enable-editline +# --enable-static-shell # --enable-dynamic-extensions # @@ -117,6 +119,21 @@ fi AC_SUBST(JSON1_FLAGS) #----------------------------------------------------------------------- +#----------------------------------------------------------------------- +# --enable-static-shell +# +AC_ARG_ENABLE(static-shell, [AS_HELP_STRING( + [--enable-static-shell], + [statically link libsqlite3 into shell tool [default=yes]])], + [], [enable_static_shell=yes]) +if test x"$enable_static_shell" == "xyes"; then + EXTRA_SHELL_OBJ=sqlite3.$OBJEXT +else + EXTRA_SHELL_OBJ=libsqlite3.la +fi +AC_SUBST(EXTRA_SHELL_OBJ) +#----------------------------------------------------------------------- + AC_CHECK_FUNCS(posix_fallocate) #----------------------------------------------------------------------- diff --git a/manifest b/manifest index ddb0e9ebc3..aba2e0b07c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\s--transaction\soption\sto\sthe\ssqldiff\stool. -D 2015-11-13T13:15:42.017 +C Add\sthe\s"--enable-static-shell"\soption\sto\sthe\samalgamation\sautoconf\sscript.\sIf\sset\s(the\sdefault)\sthe\scompiled\sshell\stool\sis\sstatically\slinked\sagainst\ssqlite3.o.\sOtherwise,\sit\sis\slinked\sagainst\slibsqlite3.so. +D 2015-11-13T16:59:00.913 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -10,12 +10,12 @@ F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 -F autoconf/Makefile.am bd4a90972aa87f079af6624ddea3df3d58f26d2f +F autoconf/Makefile.am 089e5ecdb5761e64ea1013ded02feb4d8b29927d F autoconf/README 14458f1046c118efa721aadec5f227e876d3cd38 F autoconf/README.first 6c4f34fe115ff55d4e8dbfa3cecf04a0188292f7 F autoconf/config.guess 94cc57e2a3fdb9c235b362ace86d77e89d188cad x F autoconf/config.sub 1efb390a8fb4bfafd74783a15a8fb5311c84300e x -F autoconf/configure.ac bec3caf78cf1bdbaad903dcd5c6029292eda3d2d +F autoconf/configure.ac 9a65da17e440466f9842288163f16f9b21298129 F autoconf/depcomp 0b26f101e3bc9fd1ff0be1da9fb4a82371142f92 x F autoconf/install-sh 06ee6336e63bb845c8439d777c32eb2eccc4fbf1 x F autoconf/ltmain.sh 7a658a24028f02331c1d2446562758083c5eadd1 @@ -1403,7 +1403,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 6bb314a5022c8bae63f6cdb48652915e05c06a38 -R 935905eff9b6be5b31cdb25ab8246ccb -U drh -Z 6be4f9e3d294b71573d3af5237a10dc6 +P 8882d1f3ef0fc53d7c19918c3af43c5bdd79e88f +R 2523a6a90a9922264d529f15493b3cc7 +U dan +Z 7b17a89a058e0f8db79be4630f564198 diff --git a/manifest.uuid b/manifest.uuid index e84e61c770..0e0c8ed1e1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8882d1f3ef0fc53d7c19918c3af43c5bdd79e88f \ No newline at end of file +499a02a34316cada9e197ef1d2e77c4cd75c41be \ No newline at end of file From 6653fbe91f1d91cae3891ba63bcc2afe6069417d Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 13 Nov 2015 20:52:49 +0000 Subject: [PATCH 05/27] Fix a memory leak in the fuzzcheck utility. FossilOrigin-Name: dfd6d9f4fbe902086f9158dfa5f37e781765a683 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- test/fuzzcheck.c | 3 ++- test/releasetest.tcl | 1 + 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index aba2e0b07c..0f09161c51 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\s"--enable-static-shell"\soption\sto\sthe\samalgamation\sautoconf\sscript.\sIf\sset\s(the\sdefault)\sthe\scompiled\sshell\stool\sis\sstatically\slinked\sagainst\ssqlite3.o.\sOtherwise,\sit\sis\slinked\sagainst\slibsqlite3.so. -D 2015-11-13T16:59:00.913 +C Fix\sa\smemory\sleak\sin\sthe\sfuzzcheck\sutility. +D 2015-11-13T20:52:49.277 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -753,7 +753,7 @@ F test/fuzz2.test 76dc35b32b6d6f965259508508abce75a6c4d7e1 F test/fuzz3.test 53fabcd5f0f430f8b221282f6c12c4d0903c21eb F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b F test/fuzz_malloc.test 328f70aaca63adf29b4c6f06505ed0cf57ca7c26 -F test/fuzzcheck.c ee926f1d4090d053ed542899720d4e4d30811bcc +F test/fuzzcheck.c 7c61352f20a28429b221f406f3854cf9c912f63b F test/fuzzdata1.db 7ee3227bad0e7ccdeb08a9e6822916777073c664 F test/fuzzdata2.db f03a420d3b822cc82e4f894ca957618fbe9c4973 F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba @@ -949,7 +949,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 59a3682dbfddb141c86c7d0fc407155a5517a1db +F test/releasetest.tcl 30cf0851a6fb0343b65f27dc89ab7bed3c3cc77d F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb F test/rollback.test 458fe73eb3ffdfdf9f6ba3e9b7350a6220414dea F test/rollback2.test fc14cf6d1a2b250d2735ef16124b971bce152f14 @@ -1403,7 +1403,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 8882d1f3ef0fc53d7c19918c3af43c5bdd79e88f -R 2523a6a90a9922264d529f15493b3cc7 -U dan -Z 7b17a89a058e0f8db79be4630f564198 +P 499a02a34316cada9e197ef1d2e77c4cd75c41be +R ffa98089b86396d49df8e3ddc3e3caf3 +U drh +Z 93ac31c4a1bdc9cbd2a68f004b288c50 diff --git a/manifest.uuid b/manifest.uuid index 0e0c8ed1e1..ca109b544c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -499a02a34316cada9e197ef1d2e77c4cd75c41be \ No newline at end of file +dfd6d9f4fbe902086f9158dfa5f37e781765a683 \ No newline at end of file diff --git a/test/fuzzcheck.c b/test/fuzzcheck.c index 19995684e4..32690dc466 100644 --- a/test/fuzzcheck.c +++ b/test/fuzzcheck.c @@ -838,6 +838,7 @@ int main(int argc, char **argv){ int nMem = 0; /* Memory limit */ char *zExpDb = 0; /* Write Databases to files in this directory */ char *zExpSql = 0; /* Write SQL to files in this directory */ + void *pHeap = 0; /* Heap for use by SQLite */ iBegin = timeOfDay(); #ifdef __unix__ @@ -1085,7 +1086,6 @@ int main(int argc, char **argv){ /* Limit available memory, if requested */ if( nMem>0 ){ - void *pHeap; sqlite3_shutdown(); pHeap = malloc(nMem); if( pHeap==0 ){ @@ -1184,5 +1184,6 @@ int main(int argc, char **argv){ sqlite3_libversion(), sqlite3_sourceid()); } free(azSrcDb); + free(pHeap); return 0; } diff --git a/test/releasetest.tcl b/test/releasetest.tcl index f49d0b27bd..f9c4406d40 100644 --- a/test/releasetest.tcl +++ b/test/releasetest.tcl @@ -439,6 +439,7 @@ proc run_slave_test {} { foreach {title dir configOpts testtarget makeOpts cflags opts} $T {} # Create and switch to the test directory. + set ::env(SQLITE_TMPDIR) [file normalize $dir] trace_cmd file mkdir $dir trace_cmd cd $dir catch {file delete core} From ebed3fa3e1193352caa581181332c9b26c007004 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 14 Nov 2015 16:47:23 +0000 Subject: [PATCH 06/27] Use randomness to prevent showness in the generated-column-name uniqueness checking. FossilOrigin-Name: 6266712968a2cdcd6f5a3007d60c2cf1b3faf912 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/select.c | 5 +++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 0f09161c51..abc88a6886 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\smemory\sleak\sin\sthe\sfuzzcheck\sutility. -D 2015-11-13T20:52:49.277 +C Use\srandomness\sto\sprevent\sshowness\sin\sthe\sgenerated-column-name\suniqueness\nchecking. +D 2015-11-14T16:47:23.463 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -339,7 +339,7 @@ F src/printf.c 0c4bcdd1c2e2521024f0a69cb5eb334f86b3652a F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e -F src/select.c 00a2a10d4298a685d0eeb05b09ef018a2bd81bf8 +F src/select.c 7ef4a946893f171920843d4d8c30c2544a060fbe F src/shell.c acefb4593a9bf0338a757c968f1f1bb05690d830 F src/sqlite.h.in fa62718f73553f06b2f2e362fd09ccb4e1cbb626 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad @@ -1403,7 +1403,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 499a02a34316cada9e197ef1d2e77c4cd75c41be -R ffa98089b86396d49df8e3ddc3e3caf3 +P dfd6d9f4fbe902086f9158dfa5f37e781765a683 +R f75d239f0c3cc028f9c3bdc5405581af U drh -Z 93ac31c4a1bdc9cbd2a68f004b288c50 +Z df73d438cc87e48519d39f020060cfa5 diff --git a/manifest.uuid b/manifest.uuid index ca109b544c..ea0fe67b11 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -dfd6d9f4fbe902086f9158dfa5f37e781765a683 \ No newline at end of file +6266712968a2cdcd6f5a3007d60c2cf1b3faf912 \ No newline at end of file diff --git a/src/select.c b/src/select.c index bd732e5bc8..afebf87ba4 100644 --- a/src/select.c +++ b/src/select.c @@ -1596,7 +1596,7 @@ int sqlite3ColumnsFromExprList( ){ sqlite3 *db = pParse->db; /* Database connection */ int i, j; /* Loop counters */ - int cnt; /* Index added to make the name unique */ + u32 cnt; /* Index added to make the name unique */ Column *aCol, *pCol; /* For looping over result columns */ int nCol; /* Number of columns in the result set */ Expr *p; /* Expression for a single result column */ @@ -1659,11 +1659,12 @@ int sqlite3ColumnsFromExprList( for(k=nName-1; k>1 && sqlite3Isdigit(zName[k]); k--){} if( k>=0 && zName[k]==':' ) nName = k; zName[nName] = 0; - zNewName = sqlite3MPrintf(db, "%s:%d", zName, ++cnt); + zNewName = sqlite3MPrintf(db, "%s:%u", zName, ++cnt); sqlite3DbFree(db, zName); zName = zNewName; j = -1; if( zName==0 ) break; + if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt); } } pCol->zName = zName; From 0315e3cc140683a814f9d0069d6972669332388c Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 14 Nov 2015 20:52:43 +0000 Subject: [PATCH 07/27] Use a hash table to improve the preformance of column name uniqueness checking. FossilOrigin-Name: 5b08f29f458c600401860c7d70d8174cf61e69f8 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/select.c | 38 ++++++++++++++++++-------------------- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/manifest b/manifest index abc88a6886..201d4ffc8c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Use\srandomness\sto\sprevent\sshowness\sin\sthe\sgenerated-column-name\suniqueness\nchecking. -D 2015-11-14T16:47:23.463 +C Use\sa\shash\stable\sto\simprove\sthe\spreformance\sof\scolumn\sname\suniqueness\schecking. +D 2015-11-14T20:52:43.849 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -339,7 +339,7 @@ F src/printf.c 0c4bcdd1c2e2521024f0a69cb5eb334f86b3652a F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e -F src/select.c 7ef4a946893f171920843d4d8c30c2544a060fbe +F src/select.c d5878c33d9bb66c82b2b7773731bf290248763bb F src/shell.c acefb4593a9bf0338a757c968f1f1bb05690d830 F src/sqlite.h.in fa62718f73553f06b2f2e362fd09ccb4e1cbb626 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad @@ -1403,7 +1403,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 dfd6d9f4fbe902086f9158dfa5f37e781765a683 -R f75d239f0c3cc028f9c3bdc5405581af +P 6266712968a2cdcd6f5a3007d60c2cf1b3faf912 +R 7d9535e63307ca117e4aa92e0ee4dc2c U drh -Z df73d438cc87e48519d39f020060cfa5 +Z d8b237007fcc1a03b5ce77808531ddb1 diff --git a/manifest.uuid b/manifest.uuid index ea0fe67b11..8463d0d8ec 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6266712968a2cdcd6f5a3007d60c2cf1b3faf912 \ No newline at end of file +5b08f29f458c600401860c7d70d8174cf61e69f8 \ No newline at end of file diff --git a/src/select.c b/src/select.c index afebf87ba4..802e75eeca 100644 --- a/src/select.c +++ b/src/select.c @@ -1602,7 +1602,9 @@ int sqlite3ColumnsFromExprList( Expr *p; /* Expression for a single result column */ char *zName; /* Column name */ int nName; /* Size of name in zName[] */ + Hash ht; /* Hash table of column names */ + sqlite3HashInit(&ht); if( pEList ){ nCol = pEList->nExpr; aCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol); @@ -1614,7 +1616,7 @@ int sqlite3ColumnsFromExprList( *pnCol = nCol; *paCol = aCol; - for(i=0, pCol=aCol; imallocFailed; i++, pCol++){ /* Get an appropriate name for the column */ p = sqlite3ExprSkipCollate(pEList->a[i].pExpr); @@ -1643,32 +1645,28 @@ int sqlite3ColumnsFromExprList( zName = sqlite3MPrintf(db, "%s", pEList->a[i].zSpan); } } - if( db->mallocFailed ){ - sqlite3DbFree(db, zName); - break; - } /* Make sure the column name is unique. If the name is not unique, ** append an integer to the name so that it becomes unique. */ - nName = sqlite3Strlen30(zName); - for(j=cnt=0; j1 && sqlite3Isdigit(zName[k]); k--){} - if( k>=0 && zName[k]==':' ) nName = k; - zName[nName] = 0; - zNewName = sqlite3MPrintf(db, "%s:%u", zName, ++cnt); - sqlite3DbFree(db, zName); - zName = zNewName; - j = -1; - if( zName==0 ) break; - if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt); - } + cnt = 0; + while( zName && sqlite3HashFind(&ht, zName)!=0 ){ + char *zNewName; + nName = sqlite3Strlen30(zName); + for(j=nName-1; j>0 && sqlite3Isdigit(zName[j]); j--){} + if( zName[j]==':' ) nName = j; + zName[nName] = 0; + zNewName = sqlite3MPrintf(db, "%s:%u", zName, ++cnt); + sqlite3DbFree(db, zName); + zName = zNewName; + if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt); } pCol->zName = zName; + if( zName && sqlite3HashInsert(&ht, zName, pCol)==pCol ){ + db->mallocFailed = 1; + } } + sqlite3HashClear(&ht); if( db->mallocFailed ){ for(j=0; j Date: Sat, 14 Nov 2015 22:04:22 +0000 Subject: [PATCH 08/27] Code simplification in sqlite3ColumnsFromExprList(). Update the %z format code so that it works with buffers obtained from sqlite3DbMalloc(). Add a testcase for the slow column name uniquifier. FossilOrigin-Name: 9272426057b6cb2d913519ff4c97aa6e211f7d51 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/printf.c | 2 +- src/select.c | 15 +++++---------- test/misc1.test | 9 +++++++++ 5 files changed, 24 insertions(+), 20 deletions(-) diff --git a/manifest b/manifest index 201d4ffc8c..8371747542 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Use\sa\shash\stable\sto\simprove\sthe\spreformance\sof\scolumn\sname\suniqueness\schecking. -D 2015-11-14T20:52:43.849 +C Code\ssimplification\sin\ssqlite3ColumnsFromExprList().\s\sUpdate\sthe\s%z\sformat\ncode\sso\sthat\sit\sworks\swith\sbuffers\sobtained\sfrom\ssqlite3DbMalloc().\s\sAdd\sa\ntestcase\sfor\sthe\sslow\scolumn\sname\suniquifier. +D 2015-11-14T22:04:22.826 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -335,11 +335,11 @@ F src/pcache1.c 902e1bc7bdaa81b40f8543407c5e2ac8ef4dc035 F src/pragma.c f3e7147299ca05ef4304a36f1fd6e002729c72c6 F src/pragma.h 3d94aebbebd2089899fecc01909bf2608b39507d F src/prepare.c 82e5db1013846a819f198336fed72c44c974e7b1 -F src/printf.c 0c4bcdd1c2e2521024f0a69cb5eb334f86b3652a +F src/printf.c f8fc8f04e75b1e983ef2793c27ec7a43b287e94a F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e -F src/select.c d5878c33d9bb66c82b2b7773731bf290248763bb +F src/select.c 1854c85ba100a9f76bf8cf47d4ae59a2ae799ef0 F src/shell.c acefb4593a9bf0338a757c968f1f1bb05690d830 F src/sqlite.h.in fa62718f73553f06b2f2e362fd09ccb4e1cbb626 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad @@ -875,7 +875,7 @@ F test/minmax.test 42fbad0e81afaa6e0de41c960329f2b2c3526efd F test/minmax2.test b44bae787fc7b227597b01b0ca5575c7cb54d3bc F test/minmax3.test cc1e8b010136db0d01a6f2a29ba5a9f321034354 F test/minmax4.test 936941484ebdceb8adec7c86b6cd9b6e5e897c1f -F test/misc1.test 3f1c479c5a093a6280f378c0fbff1c2701486660 +F test/misc1.test d614a334b777b1aded6873d76a3560329b819fea F test/misc2.test 00d7de54eda90e237fc9a38b9e5ccc769ebf6d4d F test/misc3.test cf3dda47d5dda3e53fc5804a100d3c82be736c9d F test/misc4.test 0d8be3466adf123a7791a66ba2bc8e8d229e87f3 @@ -1403,7 +1403,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 6266712968a2cdcd6f5a3007d60c2cf1b3faf912 -R 7d9535e63307ca117e4aa92e0ee4dc2c +P 5b08f29f458c600401860c7d70d8174cf61e69f8 +R 4914cc3a8ed45c6aa86aea7a39b8ba36 U drh -Z d8b237007fcc1a03b5ce77808531ddb1 +Z 01b4ba6f26cc34a60c8e736ca788d377 diff --git a/manifest.uuid b/manifest.uuid index 8463d0d8ec..2212eca514 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5b08f29f458c600401860c7d70d8174cf61e69f8 \ No newline at end of file +9272426057b6cb2d913519ff4c97aa6e211f7d51 \ No newline at end of file diff --git a/src/printf.c b/src/printf.c index dba928d102..9caeef8ff7 100644 --- a/src/printf.c +++ b/src/printf.c @@ -726,7 +726,7 @@ void sqlite3VXPrintf( if( width>0 && flag_leftjustify ) sqlite3AppendChar(pAccum, width, ' '); if( zExtra ){ - sqlite3_free(zExtra); + sqlite3DbFree(pAccum->db, zExtra); zExtra = 0; } }/* End for loop over the format string */ diff --git a/src/select.c b/src/select.c index 802e75eeca..2265d4c9f9 100644 --- a/src/select.c +++ b/src/select.c @@ -1622,7 +1622,6 @@ int sqlite3ColumnsFromExprList( p = sqlite3ExprSkipCollate(pEList->a[i].pExpr); if( (zName = pEList->a[i].zName)!=0 ){ /* If the column contains an "AS " phrase, use as the name */ - zName = sqlite3DbStrDup(db, zName); }else{ Expr *pColExpr = p; /* The expression that is the result column name */ Table *pTab; /* Table associated with this expression */ @@ -1635,30 +1634,26 @@ int sqlite3ColumnsFromExprList( int iCol = pColExpr->iColumn; pTab = pColExpr->pTab; if( iCol<0 ) iCol = pTab->iPKey; - zName = sqlite3MPrintf(db, "%s", - iCol>=0 ? pTab->aCol[iCol].zName : "rowid"); + zName = iCol>=0 ? pTab->aCol[iCol].zName : "rowid"; }else if( pColExpr->op==TK_ID ){ assert( !ExprHasProperty(pColExpr, EP_IntValue) ); - zName = sqlite3MPrintf(db, "%s", pColExpr->u.zToken); + zName = pColExpr->u.zToken; }else{ /* Use the original text of the column expression as its name */ - zName = sqlite3MPrintf(db, "%s", pEList->a[i].zSpan); + zName = pEList->a[i].zSpan; } } + zName = sqlite3MPrintf(db, "%s", zName); /* Make sure the column name is unique. If the name is not unique, ** append an integer to the name so that it becomes unique. */ cnt = 0; while( zName && sqlite3HashFind(&ht, zName)!=0 ){ - char *zNewName; nName = sqlite3Strlen30(zName); for(j=nName-1; j>0 && sqlite3Isdigit(zName[j]); j--){} if( zName[j]==':' ) nName = j; - zName[nName] = 0; - zNewName = sqlite3MPrintf(db, "%s:%u", zName, ++cnt); - sqlite3DbFree(db, zName); - zName = zNewName; + zName = sqlite3MPrintf(db, "%.*z:%u", nName, zName, ++cnt); if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt); } pCol->zName = zName; diff --git a/test/misc1.test b/test/misc1.test index 25e9bd813e..6e0abcd108 100644 --- a/test/misc1.test +++ b/test/misc1.test @@ -701,4 +701,13 @@ do_test misc1-24.0 { list [catch { sqlite3_prepare_v2 db ! -1 dummy } msg] $msg } {1 {(1) unrecognized token: "!}} +# The following query (provided by Kostya Serebryany) used to take 25 +# minutes to prepare. This has been speeded up to about 250 milliseconds. +# +do_catchsql_test misc1-25.0 { +SELECT-1 UNION SELECT 5 UNION SELECT 0 UNION SElECT*from(SELECT-5) UNION SELECT*from(SELECT-0) UNION SELECT:SELECT-0 UNION SELECT-1 UNION SELECT 1 UNION SELECT 1 ORDER BY S in(WITH K AS(WITH K AS(select'CREINDERcharREADEVIRTUL5TABLECONFLICT !1 USIN'' MFtOR(b38q,eWITH K AS(selectCREATe TABLE t0(a,b,c,d,e, PRIMARY KEY(a,b,c,d,c,a,b,b,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,a,b,b,c,d,c,a,c,d,c,d,c,e,d,d,c,a,b,b,c,c,a,b,b,E,d,c,d,c,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,a,b,c,e,d,d,c,a,b,b,c,d,d,c,a,b,c,e,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,a,b,c,e,d,d,c,a,b,b,b,c,e,d,d,c,a,b,b,c,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,e,d,d,c,a,b,b,c,c,a,b,b,E,d,c,d,c,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d'CEIl,k'',ab, g, a,b,o11b, i'nEX/charREDE IVT LR!VABLt5SG',N ,N in rement,l_vacuum,M&U,'te3(''5l' a,bB,b,l*e)SELECT:SELECT, *,*,*from(( SELECT +$group,:conc ap0,1)fro,(select"",:PBAG,c,a,b,b,c,a,b,c,e,d,d,c,a,b,b,c,d,d,c,a,b,c,e,d,c,d,c,a,b,c,e,c,d,c,d,c,a,b,b,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,a,b,c,e,d,d,c,a,b,b,b,c,e,d,d,c,a,b,b,c,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,e,d,d,c,a,b,b,c,c,a,b,b,E,d,c,d,c,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,a,b,c,e,d,d,c,a,b,b,c,d,d,c,a,b,c,e,d,c,d,c,a,b,c,e,c,d,c,d,c,a,b,b,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,e,d,d,c,a,b,b,c,c,a,b,b,E,d,c,d,c,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,a,b,c,e,d,d,c,a,b,b,c,d,d,c,a,b,c,e,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,c,d,c,c,a,a,b,d,d,c,a,b,b,c,d,c,a,b,e,e,d,b,c,d,c,a,b,b,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d, foreign_keysc,d,c,e,d,d,c,a,b,b,c,c,a,b,b,E,d,c,d,c,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,a,b,d,d,c,a,b,b,c,d,c,a,b,e,e,d,b,c,d,c,a,b,b,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,a,b,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,e,d,d,c,a,b,b,c,c,a,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,a,b,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,e,d,d,c,a,b,b,c,c,a,b,b,E,d,c,d,c,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,a,b,c,e,d,d,c,a,b,b,c,d,d,c,a,b,c,e,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,c,d,c,a,b,d,d,c,a,a,b,d,d,c,a,b,b,c,d,c,a,b,e,e,d,b,c,d,c,a,b,b,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,e,d,d,c,a,b,b,c,c,a,b,b,E,d,c,d,c,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,a,b,d,d,c,a,b,b,c,d,c,a,b,e,e,d,b,c,d,c,a,b,b,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,c,a,b,b,c,d,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,d,c,e,d,d,c,a,b,b,c,c,a,b,b,E,d,c,d,c,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,a,bb,b,E,d,c,d,c,b,c,d,c,d,c,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,a,b,c,e,d,d,c,a,b,b,c,d,d,c,a,b,c,e,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,c,d,c,a,b,d,d,c,a,a,b,d,d,c,a,b,b,c,d,c,a,b,e,e,d,b,c,d,c,a,b,b,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,c,a,b,c,e,d,d,c,a,b,b,c,d,c,d,c,a,b,c,e,c,d,c,a,b,b,c,d,MAato_aecSELEC,+?b," "O,"i","a",""b ,5 ))KEY)SELECT*FROM((k()reaC,k,K) eA,k '' )t ,K M); +} {1 {too many columns in result set}} + + finish_test From f7ee8965a5f36fd6dbd9469784ab6e539cea950d Mon Sep 17 00:00:00 2001 From: drh Date: Sun, 15 Nov 2015 11:13:49 +0000 Subject: [PATCH 09/27] Fix the column name uniquifier so that it works with zero-length column names. FossilOrigin-Name: 791761ebac26c82ab67bdf867117ec5b5d8b20b0 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/select.c | 6 ++++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 8371747542..7784ab59fa 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Code\ssimplification\sin\ssqlite3ColumnsFromExprList().\s\sUpdate\sthe\s%z\sformat\ncode\sso\sthat\sit\sworks\swith\sbuffers\sobtained\sfrom\ssqlite3DbMalloc().\s\sAdd\sa\ntestcase\sfor\sthe\sslow\scolumn\sname\suniquifier. -D 2015-11-14T22:04:22.826 +C Fix\sthe\scolumn\sname\suniquifier\sso\sthat\sit\sworks\swith\szero-length\scolumn\snames. +D 2015-11-15T11:13:49.647 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -339,7 +339,7 @@ F src/printf.c f8fc8f04e75b1e983ef2793c27ec7a43b287e94a F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e -F src/select.c 1854c85ba100a9f76bf8cf47d4ae59a2ae799ef0 +F src/select.c 4c58ae319df6862e5ea237e757b5d317c4491798 F src/shell.c acefb4593a9bf0338a757c968f1f1bb05690d830 F src/sqlite.h.in fa62718f73553f06b2f2e362fd09ccb4e1cbb626 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad @@ -1403,7 +1403,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 5b08f29f458c600401860c7d70d8174cf61e69f8 -R 4914cc3a8ed45c6aa86aea7a39b8ba36 +P 9272426057b6cb2d913519ff4c97aa6e211f7d51 +R a974c67769be53d36ddc37d671cc0607 U drh -Z 01b4ba6f26cc34a60c8e736ca788d377 +Z f40155003991429935f69f917db4e724 diff --git a/manifest.uuid b/manifest.uuid index 2212eca514..571a15823a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9272426057b6cb2d913519ff4c97aa6e211f7d51 \ No newline at end of file +791761ebac26c82ab67bdf867117ec5b5d8b20b0 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 2265d4c9f9..126d4cc282 100644 --- a/src/select.c +++ b/src/select.c @@ -1651,8 +1651,10 @@ int sqlite3ColumnsFromExprList( cnt = 0; while( zName && sqlite3HashFind(&ht, zName)!=0 ){ nName = sqlite3Strlen30(zName); - for(j=nName-1; j>0 && sqlite3Isdigit(zName[j]); j--){} - if( zName[j]==':' ) nName = j; + if( nName>0 ){ + for(j=nName-1; j>0 && sqlite3Isdigit(zName[j]); j--){} + if( zName[j]==':' ) nName = j; + } zName = sqlite3MPrintf(db, "%.*z:%u", nName, zName, ++cnt); if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt); } From 3fd415b2bf46be65360579d1b84d4dd20b2dbbf7 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 16 Nov 2015 08:54:10 +0000 Subject: [PATCH 10/27] In the shell tool, avoid testing if (sqlite3_vfs.xGetCurrentInt64) is NULL for a version 1 VFS. This field is only defined for version 2 and greater. FossilOrigin-Name: ad5fcaa583ef743d143b6c030e0d78019709fe71 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/shell.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 7784ab59fa..fb4d5c08eb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sthe\scolumn\sname\suniquifier\sso\sthat\sit\sworks\swith\szero-length\scolumn\snames. -D 2015-11-15T11:13:49.647 +C In\sthe\sshell\stool,\savoid\stesting\sif\s(sqlite3_vfs.xGetCurrentInt64)\sis\sNULL\sfor\sa\sversion\s1\sVFS.\sThis\sfield\sis\sonly\sdefined\sfor\sversion\s2\sand\sgreater. +D 2015-11-16T08:54:10.841 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -340,7 +340,7 @@ F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e F src/select.c 4c58ae319df6862e5ea237e757b5d317c4491798 -F src/shell.c acefb4593a9bf0338a757c968f1f1bb05690d830 +F src/shell.c 0092cd4e1da5322b7bc35bedbec1f0dea627451e F src/sqlite.h.in fa62718f73553f06b2f2e362fd09ccb4e1cbb626 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad F src/sqlite3ext.h 4b66e3e3435da4b4c8c83696d0349f0c503b3924 @@ -1403,7 +1403,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 9272426057b6cb2d913519ff4c97aa6e211f7d51 -R a974c67769be53d36ddc37d671cc0607 -U drh -Z f40155003991429935f69f917db4e724 +P 791761ebac26c82ab67bdf867117ec5b5d8b20b0 +R a635725b446415a63ce3c96185f06f0a +U dan +Z ecc9df21b64c8edc0682f60d01379dbf diff --git a/manifest.uuid b/manifest.uuid index 571a15823a..19652556ca 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -791761ebac26c82ab67bdf867117ec5b5d8b20b0 \ No newline at end of file +ad5fcaa583ef743d143b6c030e0d78019709fe71 \ No newline at end of file diff --git a/src/shell.c b/src/shell.c index 7c53995799..84f693300f 100644 --- a/src/shell.c +++ b/src/shell.c @@ -165,7 +165,7 @@ static sqlite3_int64 timeOfDay(void){ static sqlite3_vfs *clockVfs = 0; sqlite3_int64 t; if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0); - if( clockVfs->iVersion>=1 && clockVfs->xCurrentTimeInt64!=0 ){ + if( clockVfs->iVersion>=2 && clockVfs->xCurrentTimeInt64!=0 ){ clockVfs->xCurrentTimeInt64(clockVfs, &t); }else{ double r; From e4e416e87ea95696a8630e37d09836e2adf7753c Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 16 Nov 2015 15:28:54 +0000 Subject: [PATCH 11/27] Add testfixture command "vfs_current_time_int64". Returns the value returned by the xCurrentTimeInt64 method of the default VFS. FossilOrigin-Name: f79d5b1853b3d4316ea08de8206ffca33e44c395 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/test1.c | 25 +++++++++++++++++++++++-- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index fb4d5c08eb..331799161e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sthe\sshell\stool,\savoid\stesting\sif\s(sqlite3_vfs.xGetCurrentInt64)\sis\sNULL\sfor\sa\sversion\s1\sVFS.\sThis\sfield\sis\sonly\sdefined\sfor\sversion\s2\sand\sgreater. -D 2015-11-16T08:54:10.841 +C Add\stestfixture\scommand\s"vfs_current_time_int64".\sReturns\sthe\svalue\sreturned\sby\sthe\sxCurrentTimeInt64\smethod\sof\sthe\sdefault\sVFS. +D 2015-11-16T15:28:54.851 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -349,7 +349,7 @@ F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46 F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e F src/tclsqlite.c d9439b6a910985b7fff43ba6756bcef00de22649 -F src/test1.c 05df2a9e4f483b2fb642162209e3aeb11c24b44f +F src/test1.c 4004bcc1b3b361a9137acd1d875599ecbdd6f961 F src/test2.c 5586f43fcd9a1be0830793cf9d354082c261b25b F src/test3.c a8887dabbbee3059af338f20d290084a63ed1b0f F src/test4.c d168f83cc78d02e8d35567bb5630e40dcd85ac1e @@ -1403,7 +1403,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 791761ebac26c82ab67bdf867117ec5b5d8b20b0 -R a635725b446415a63ce3c96185f06f0a +P ad5fcaa583ef743d143b6c030e0d78019709fe71 +R bad7a2932fd1612d76a527d68176f4b8 U dan -Z ecc9df21b64c8edc0682f60d01379dbf +Z d6f5979512fe258a491a417c706992f9 diff --git a/manifest.uuid b/manifest.uuid index 19652556ca..6762a846fd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ad5fcaa583ef743d143b6c030e0d78019709fe71 \ No newline at end of file +f79d5b1853b3d4316ea08de8206ffca33e44c395 \ No newline at end of file diff --git a/src/test1.c b/src/test1.c index 43feb2dc2d..186e4e4684 100644 --- a/src/test1.c +++ b/src/test1.c @@ -2238,7 +2238,6 @@ static int test_config_sqllog( int objc, Tcl_Obj *CONST objv[] ){ - sqlite3_stmt *pStmt; /* First argument */ if( objc!=1 ){ Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; @@ -2248,6 +2247,28 @@ static int test_config_sqllog( } #endif +/* +** Usage: vfs_current_time_int64 +** +** Return the value returned by the default VFS's xCurrentTimeInt64 method. +*/ +static int vfsCurrentTimeInt64( + void * clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *CONST objv[] +){ + i64 t; + sqlite3_vfs *pVfs = sqlite3_vfs_find(0); + if( objc!=1 ){ + Tcl_WrongNumArgs(interp, 1, objv, ""); + return TCL_ERROR; + } + pVfs->xCurrentTimeInt64(pVfs, &t); + Tcl_SetObjResult(interp, Tcl_NewWideIntObj(t)); + return TCL_OK; +} + /* ** Usage: sqlite3_next_stmt DB STMT ** @@ -7061,7 +7082,7 @@ int Sqlitetest1_Init(Tcl_Interp *interp){ #ifdef SQLITE_ENABLE_SQLLOG { "sqlite3_config_sqllog", test_config_sqllog, 0 }, #endif - + { "vfs_current_time_int64", vfsCurrentTimeInt64, 0 }, }; static int bitmask_size = sizeof(Bitmask)*8; static int longdouble_size = sizeof(LONGDOUBLE_TYPE); From 81c7811fe7b7a3650f57c75b4357c2e4e225d07f Mon Sep 17 00:00:00 2001 From: mistachkin Date: Tue, 17 Nov 2015 19:16:39 +0000 Subject: [PATCH 12/27] Fix harmless compiler warning. FossilOrigin-Name: eea26b6caea37422c9b46a7a3a538b0c9575f392 --- manifest | 14 +++++++------- manifest.uuid | 2 +- tool/mkkeywordhash.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 331799161e..925e6dad3c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\stestfixture\scommand\s"vfs_current_time_int64".\sReturns\sthe\svalue\sreturned\sby\sthe\sxCurrentTimeInt64\smethod\sof\sthe\sdefault\sVFS. -D 2015-11-16T15:28:54.851 +C Fix\sharmless\scompiler\swarning. +D 2015-11-17T19:16:39.306 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -1361,7 +1361,7 @@ F tool/lempar.c 3ec1463a034b37d87d782be5f6b8b10a3b1ecbe7 F tool/loadfts.c c3c64e4d5e90e8ba41159232c2189dba4be7b862 F tool/logest.c eef612f8adf4d0993dafed0416064cf50d5d33c6 F tool/mkautoconfamal.sh 4bdf61548a143e5977bd86ab93d68b694d10c8fa -F tool/mkkeywordhash.c 37f9c2e62c31384b697ede8825e2d344e98db22c +F tool/mkkeywordhash.c 06ec0b78bd4fa68c12d90ef2bdfe76b039133ff8 F tool/mkopcodec.tcl edde8adc42621b5e598127f8cdc6d52cfe21f52b F tool/mkopcodeh.tcl e04177031532b7aa9379ded50e820231ac4abd6e F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e @@ -1403,7 +1403,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 ad5fcaa583ef743d143b6c030e0d78019709fe71 -R bad7a2932fd1612d76a527d68176f4b8 -U dan -Z d6f5979512fe258a491a417c706992f9 +P f79d5b1853b3d4316ea08de8206ffca33e44c395 +R 2de2a0c3dc7ccab5c10590e17dcb5ba5 +U mistachkin +Z 23c5ff0945aadd15158110acb76ae975 diff --git a/manifest.uuid b/manifest.uuid index 6762a846fd..d48bc97cdb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f79d5b1853b3d4316ea08de8206ffca33e44c395 \ No newline at end of file +eea26b6caea37422c9b46a7a3a538b0c9575f392 \ No newline at end of file diff --git a/tool/mkkeywordhash.c b/tool/mkkeywordhash.c index e4d393e3fa..003ed7d66e 100644 --- a/tool/mkkeywordhash.c +++ b/tool/mkkeywordhash.c @@ -328,7 +328,7 @@ static Keyword *findById(int id){ ** output. */ int main(int argc, char **argv){ - int i, j, k, h, m; + int i, j, k, h; int bestSize, bestCount; int count; int nChar; From bfe8bd5a5ed89205b0174e6d5174795002c55fab Mon Sep 17 00:00:00 2001 From: mistachkin Date: Tue, 17 Nov 2015 19:17:14 +0000 Subject: [PATCH 13/27] Fix uninitialized variable in the command line shell. FossilOrigin-Name: dc2ac024d31a898bbc3e7fc824d806e63e993234 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 925e6dad3c..cf927a2229 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarning. -D 2015-11-17T19:16:39.306 +C Fix\suninitialized\svariable\sin\sthe\scommand\sline\sshell. +D 2015-11-17T19:17:14.024 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -340,7 +340,7 @@ F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e F src/select.c 4c58ae319df6862e5ea237e757b5d317c4491798 -F src/shell.c 0092cd4e1da5322b7bc35bedbec1f0dea627451e +F src/shell.c f0f59ea60ad297f671b7ae0fb957a736ad17c92c F src/sqlite.h.in fa62718f73553f06b2f2e362fd09ccb4e1cbb626 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad F src/sqlite3ext.h 4b66e3e3435da4b4c8c83696d0349f0c503b3924 @@ -1403,7 +1403,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 f79d5b1853b3d4316ea08de8206ffca33e44c395 -R 2de2a0c3dc7ccab5c10590e17dcb5ba5 +P eea26b6caea37422c9b46a7a3a538b0c9575f392 +R cc64f84be685bae79d5a153d40e5e973 U mistachkin -Z 23c5ff0945aadd15158110acb76ae975 +Z 3d10a1734b384a6c71eab8ba5f61ca6f diff --git a/manifest.uuid b/manifest.uuid index d48bc97cdb..b83646e075 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -eea26b6caea37422c9b46a7a3a538b0c9575f392 \ No newline at end of file +dc2ac024d31a898bbc3e7fc824d806e63e993234 \ No newline at end of file diff --git a/src/shell.c b/src/shell.c index 84f693300f..d2f9ca500a 100644 --- a/src/shell.c +++ b/src/shell.c @@ -2560,7 +2560,7 @@ static int shell_dbinfo_command(ShellState *p, int nArg, char **azArg){ { "schema size:", "SELECT total(length(sql)) FROM %s" }, }; - sqlite3_file *pFile; + sqlite3_file *pFile = 0; int i; char *zSchemaTab; char *zDb = nArg>=2 ? azArg[1] : "main"; From fe33e39ba6236cab021c6615edc14ca113b26b20 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 17 Nov 2015 20:56:06 +0000 Subject: [PATCH 14/27] When using mmap mode on unix, use a read-only mapping by default. Write to the database file using write(). Unless SQLITE_MMAP_READWRITE is defined, in which case use a read/write mapping and write into the file using memcpy(). FossilOrigin-Name: 67c5d3c646c8198c8637069140aca952b802df25 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/os_unix.c | 4 +++- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index cf927a2229..41d7945788 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\suninitialized\svariable\sin\sthe\scommand\sline\sshell. -D 2015-11-17T19:17:14.024 +C When\susing\smmap\smode\son\sunix,\suse\sa\sread-only\smapping\sby\sdefault.\sWrite\sto\sthe\sdatabase\sfile\susing\swrite().\sUnless\sSQLITE_MMAP_READWRITE\sis\sdefined,\sin\swhich\scase\suse\sa\sread/write\smapping\sand\swrite\sinto\sthe\sfile\susing\smemcpy(). +D 2015-11-17T20:56:06.787 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -323,7 +323,7 @@ F src/os.c 8fd25588eeba74068d41102d26810e216999b6c8 F src/os.h 3e57a24e2794a94d3cf2342c6d9a884888cd96bf F src/os_common.h abdb9a191a367793268fe553d25bab894e986a0e F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa -F src/os_unix.c cf72e06e15839ebe7121e01d3eebf256c039b0ca +F src/os_unix.c eb24e0340fbe3cfd0eabfb15a71476953e54fa73 F src/os_win.c 1716291e5ec2dbfc5a1fe0b32182030f1f7d8acf F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca F src/pager.c 18341e2b759b447cbc82fb9215d08d9c5864e92e @@ -1403,7 +1403,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 eea26b6caea37422c9b46a7a3a538b0c9575f392 -R cc64f84be685bae79d5a153d40e5e973 -U mistachkin -Z 3d10a1734b384a6c71eab8ba5f61ca6f +P dc2ac024d31a898bbc3e7fc824d806e63e993234 +R 84fe0eec79106a76020c4d6d9eb9fda8 +U dan +Z e25a64e1e3c268c6ee1a9c7b42e3911f diff --git a/manifest.uuid b/manifest.uuid index b83646e075..e65363fd12 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -dc2ac024d31a898bbc3e7fc824d806e63e993234 \ No newline at end of file +67c5d3c646c8198c8637069140aca952b802df25 \ No newline at end of file diff --git a/src/os_unix.c b/src/os_unix.c index b322d238e8..3d4524296b 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -3349,7 +3349,7 @@ static int unixWrite( } #endif -#if SQLITE_MAX_MMAP_SIZE>0 +#if defined(SQLITE_MMAP_READWRITE) && SQLITE_MAX_MMAP_SIZE>0 /* Deal with as much of this write request as possible by transfering ** data from the memory mapping using memcpy(). */ if( offsetmmapSize ){ @@ -4774,7 +4774,9 @@ static void unixRemapfile( assert( pFd->mmapSizeActual>=pFd->mmapSize ); assert( MAP_FAILED!=0 ); +#ifdef SQLITE_MMAP_READWRITE if( (pFd->ctrlFlags & UNIXFILE_RDONLY)==0 ) flags |= PROT_WRITE; +#endif if( pOrig ){ #if HAVE_MREMAP From c88cd1375358a4adbc52f45a8c81d20008c8622a Mon Sep 17 00:00:00 2001 From: mistachkin Date: Tue, 17 Nov 2015 21:42:32 +0000 Subject: [PATCH 15/27] When using mmap mode on Win32, use a read-only mapping by default. Write to the database file using WriteFile(). Unless SQLITE_MMAP_READWRITE is defined, in which case use a read/write mapping and write into the file using memcpy(). FossilOrigin-Name: 4f521b5bb36a1117db324e92dcf80abd2f1a5bc1 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/os_win.c | 4 +++- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 41d7945788..3977bc21ce 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\susing\smmap\smode\son\sunix,\suse\sa\sread-only\smapping\sby\sdefault.\sWrite\sto\sthe\sdatabase\sfile\susing\swrite().\sUnless\sSQLITE_MMAP_READWRITE\sis\sdefined,\sin\swhich\scase\suse\sa\sread/write\smapping\sand\swrite\sinto\sthe\sfile\susing\smemcpy(). -D 2015-11-17T20:56:06.787 +C When\susing\smmap\smode\son\sWin32,\suse\sa\sread-only\smapping\sby\sdefault.\sWrite\sto\sthe\sdatabase\sfile\susing\sWriteFile().\sUnless\sSQLITE_MMAP_READWRITE\sis\sdefined,\sin\swhich\scase\suse\sa\sread/write\smapping\sand\swrite\sinto\sthe\sfile\susing\smemcpy(). +D 2015-11-17T21:42:32.347 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -324,7 +324,7 @@ F src/os.h 3e57a24e2794a94d3cf2342c6d9a884888cd96bf F src/os_common.h abdb9a191a367793268fe553d25bab894e986a0e F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa F src/os_unix.c eb24e0340fbe3cfd0eabfb15a71476953e54fa73 -F src/os_win.c 1716291e5ec2dbfc5a1fe0b32182030f1f7d8acf +F src/os_win.c 2d77dab5c555a18c0aff379c6a692fc3499044d9 F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca F src/pager.c 18341e2b759b447cbc82fb9215d08d9c5864e92e F src/pager.h 87c4118a71ba3965184148b379a6d93179071091 @@ -1403,7 +1403,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 dc2ac024d31a898bbc3e7fc824d806e63e993234 -R 84fe0eec79106a76020c4d6d9eb9fda8 -U dan -Z e25a64e1e3c268c6ee1a9c7b42e3911f +P 67c5d3c646c8198c8637069140aca952b802df25 +R d582abf646ba97a05dcf7955b3e63a88 +U mistachkin +Z 3d22a16f35aefddddac7e9c38e41c6d4 diff --git a/manifest.uuid b/manifest.uuid index e65363fd12..f18cecb173 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -67c5d3c646c8198c8637069140aca952b802df25 \ No newline at end of file +4f521b5bb36a1117db324e92dcf80abd2f1a5bc1 \ No newline at end of file diff --git a/src/os_win.c b/src/os_win.c index 251107528b..9ae40e22af 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -2602,7 +2602,7 @@ static int winWrite( "offset=%lld, lock=%d\n", osGetCurrentProcessId(), pFile, pFile->h, pBuf, amt, offset, pFile->locktype)); -#if SQLITE_MAX_MMAP_SIZE>0 +#if defined(SQLITE_MMAP_READWRITE) && SQLITE_MAX_MMAP_SIZE>0 /* Deal with as much of this write request as possible by transfering ** data from the memory mapping using memcpy(). */ if( offsetmmapSize ){ @@ -4096,10 +4096,12 @@ static int winMapfile(winFile *pFd, sqlite3_int64 nByte){ DWORD flags = FILE_MAP_READ; winUnmapfile(pFd); +#ifdef SQLITE_MMAP_READWRITE if( (pFd->ctrlFlags & WINFILE_RDONLY)==0 ){ protect = PAGE_READWRITE; flags |= FILE_MAP_WRITE; } +#endif #if SQLITE_OS_WINRT pFd->hMap = osCreateFileMappingFromApp(pFd->h, NULL, protect, nMap, NULL); #elif defined(SQLITE_WIN32_HAS_WIDE) From f0c9145a3609c17ba53aed561657c53be343e2e8 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 18 Nov 2015 18:43:15 +0000 Subject: [PATCH 16/27] If a table column name begins with "__hidden__" then do not include that column in "*" expansions in SELECT statements, nor fill in that column in an INSERT INTO that omits the column list. This branch is a proof-of-concept only and is not intended to ever be merged into trunk. FossilOrigin-Name: 2dbffb3a3b20dba7d7d86c8ad2e34633f616c78a --- manifest | 21 ++++++++++++--------- manifest.uuid | 2 +- src/build.c | 3 +++ src/insert.c | 9 ++++----- src/select.c | 3 ++- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index 3977bc21ce..067b1c8ee5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\susing\smmap\smode\son\sWin32,\suse\sa\sread-only\smapping\sby\sdefault.\sWrite\sto\sthe\sdatabase\sfile\susing\sWriteFile().\sUnless\sSQLITE_MMAP_READWRITE\sis\sdefined,\sin\swhich\scase\suse\sa\sread/write\smapping\sand\swrite\sinto\sthe\sfile\susing\smemcpy(). -D 2015-11-17T21:42:32.347 +C If\sa\stable\scolumn\sname\sbegins\swith\s"__hidden__"\sthen\sdo\snot\sinclude\sthat\ncolumn\sin\s"*"\sexpansions\sin\sSELECT\sstatements,\snor\sfill\sin\sthat\scolumn\sin\nan\sINSERT\sINTO\sthat\somits\sthe\scolumn\slist.\s\sThis\sbranch\sis\sa\s\nproof-of-concept\sonly\sand\sis\snot\sintended\sto\sever\sbe\smerged\sinto\strunk. +D 2015-11-18T18:43:15.107 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 ca574d33ffb1763cfd2979383f4d507095bfbe19 +F src/build.c a62cef335439eca53f8b0b12fae4b6925ff5b980 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 419a947f27ce2da18eebf440a5aa80cc825defae +F src/insert.c 0b376795f688aafd264ff0c5a6538e5a4cc6c213 F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e F src/loadext.c 18586e45a215325f15096821e9c082035d4fb810 @@ -339,7 +339,7 @@ F src/printf.c f8fc8f04e75b1e983ef2793c27ec7a43b287e94a F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e -F src/select.c 4c58ae319df6862e5ea237e757b5d317c4491798 +F src/select.c 2fa981f5bc793fb6b48f013c82662bcc969e3af5 F src/shell.c f0f59ea60ad297f671b7ae0fb957a736ad17c92c F src/sqlite.h.in fa62718f73553f06b2f2e362fd09ccb4e1cbb626 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad @@ -1403,7 +1403,10 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 67c5d3c646c8198c8637069140aca952b802df25 -R d582abf646ba97a05dcf7955b3e63a88 -U mistachkin -Z 3d22a16f35aefddddac7e9c38e41c6d4 +P 4f521b5bb36a1117db324e92dcf80abd2f1a5bc1 +R 935d388c6bd4428c029b70918e7ca51f +T *branch * hidden-columns-in-tables +T *sym-hidden-columns-in-tables * +T -sym-trunk * +U drh +Z 5682a263851a58e238bd47d4c8fd6809 diff --git a/manifest.uuid b/manifest.uuid index f18cecb173..57644a3da5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4f521b5bb36a1117db324e92dcf80abd2f1a5bc1 \ No newline at end of file +2dbffb3a3b20dba7d7d86c8ad2e34633f616c78a \ No newline at end of file diff --git a/src/build.c b/src/build.c index 8cb2d44ac7..9a4a0cc8d4 100644 --- a/src/build.c +++ b/src/build.c @@ -1104,6 +1104,9 @@ 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; + } /* If there is no type specified, columns have the default affinity ** 'BLOB'. If there is a type specified, then sqlite3AddColumnType() will diff --git a/src/insert.c b/src/insert.c index 3d213a8d37..2c159fd2bc 100644 --- a/src/insert.c +++ b/src/insert.c @@ -736,10 +736,8 @@ void sqlite3Insert( /* Make sure the number of columns in the source data matches the number ** of columns to be inserted into the table. */ - if( IsVirtual(pTab) ){ - for(i=0; inCol; i++){ - nHidden += (IsHiddenColumn(&pTab->aCol[i]) ? 1 : 0); - } + for(i=0; inCol; i++){ + nHidden += (IsHiddenColumn(&pTab->aCol[i]) ? 1 : 0); } if( pColumn==0 && nColumn && nColumn!=(pTab->nCol-nHidden) ){ sqlite3ErrorMsg(pParse, @@ -934,7 +932,8 @@ void sqlite3Insert( } if( pColumn==0 ){ if( IsHiddenColumn(&pTab->aCol[i]) ){ - assert( IsVirtual(pTab) ); + assert( IsVirtual(pTab) + || sqlite3_strnicmp(pTab->aCol[i].zName,"__hidden__",10)==0 ); j = -1; nHidden++; }else{ diff --git a/src/select.c b/src/select.c index 126d4cc282..41a3c50a58 100644 --- a/src/select.c +++ b/src/select.c @@ -4365,7 +4365,8 @@ static int selectExpander(Walker *pWalker, Select *p){ ** result-set list. */ if( IsHiddenColumn(&pTab->aCol[j]) ){ - assert(IsVirtual(pTab)); + assert( IsVirtual(pTab) + || sqlite3_strnicmp(pTab->aCol[j].zName,"__hidden__", 10)==0 ); continue; } tableSeen = 1; From d1ce65fc76027689e7627869e70afcb7c377df77 Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 18 Nov 2015 20:07:12 +0000 Subject: [PATCH 17/27] Add a test for the __hidden__ hack on this branch. FossilOrigin-Name: ebf4bbffec58111a670c46a9eb469bfd2440b0b1 --- manifest | 16 +++++++-------- manifest.uuid | 2 +- test/hidden.test | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 test/hidden.test diff --git a/manifest b/manifest index 067b1c8ee5..a66f8fa512 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C If\sa\stable\scolumn\sname\sbegins\swith\s"__hidden__"\sthen\sdo\snot\sinclude\sthat\ncolumn\sin\s"*"\sexpansions\sin\sSELECT\sstatements,\snor\sfill\sin\sthat\scolumn\sin\nan\sINSERT\sINTO\sthat\somits\sthe\scolumn\slist.\s\sThis\sbranch\sis\sa\s\nproof-of-concept\sonly\sand\sis\snot\sintended\sto\sever\sbe\smerged\sinto\strunk. -D 2015-11-18T18:43:15.107 +C Add\sa\stest\sfor\sthe\s__hidden__\shack\son\sthis\sbranch. +D 2015-11-18T20:07:12.847 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -762,6 +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 b48497a68ad5fc428533e08df7f3743ef919e168 F test/hook.test 162d7cef7a2d2b04839fe14402934e6a1b79442f F test/icu.test 70df4faca133254c042d02ae342c0a141f2663f4 F test/ieee754.test 118b665a97a8df0e8f2fbdb07d113e596f4a6b53 @@ -1403,10 +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 4f521b5bb36a1117db324e92dcf80abd2f1a5bc1 -R 935d388c6bd4428c029b70918e7ca51f -T *branch * hidden-columns-in-tables -T *sym-hidden-columns-in-tables * -T -sym-trunk * -U drh -Z 5682a263851a58e238bd47d4c8fd6809 +P 2dbffb3a3b20dba7d7d86c8ad2e34633f616c78a +R 83cf7865dae52d6bb8a186c1aa991823 +U dan +Z 1a0e4ed515d3bb3eb2db7f71110d453e diff --git a/manifest.uuid b/manifest.uuid index 57644a3da5..433cf093a2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2dbffb3a3b20dba7d7d86c8ad2e34633f616c78a \ No newline at end of file +ebf4bbffec58111a670c46a9eb469bfd2440b0b1 \ No newline at end of file diff --git a/test/hidden.test b/test/hidden.test new file mode 100644 index 0000000000..2bc253c903 --- /dev/null +++ b/test/hidden.test @@ -0,0 +1,51 @@ +# 2015 November 18 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# +# Test the __hidden__ hack. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl +set testprefix hidden + +do_execsql_test 1.1 { + CREATE TABLE t1(__hidden__a, b); + INSERT INTO t1 VALUES('1'); + INSERT INTO t1(__hidden__a, b) VALUES('x', 'y'); +} {} + +do_execsql_test 1.2 { + SELECT * FROM t1; +} {1 y} + +do_execsql_test 1.3 { + SELECT __hidden__a, * FROM t1; +} {{} 1 x y} + +#do_execsql_test 2.1 { + #CREATE TABLE x1(a, b, c); + #INSERT INTO x1 VALUES(1, 2, 3); + #CREATE VIEW v1(a, b, __hidden__c) AS SELECT a, b, c FROM x1; + #SELECT * FROM v1; +#} {1 2} + +do_execsql_test 2.2 { + PRAGMA table_info(v1); +} { +0 a {} 0 {} 0 +1 b {} 0 {} 0 +2 __hidden__c {} 0 {} 0 +} + + + + +finish_test From 6aed239acce616ddcf9c365cb8c67c7cce2bc56c Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 18 Nov 2015 20:57:50 +0000 Subject: [PATCH 18/27] Honor the "__hidden__" prefix on the columns of views. FossilOrigin-Name: 3071ba2bdbda7018d0a285eceb04b8527209ec1e --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/select.c | 8 ++++++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index a66f8fa512..34c001b3c7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\stest\sfor\sthe\s__hidden__\shack\son\sthis\sbranch. -D 2015-11-18T20:07:12.847 +C Honor\sthe\s"__hidden__"\sprefix\son\sthe\scolumns\sof\sviews. +D 2015-11-18T20:57:50.853 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -339,7 +339,7 @@ F src/printf.c f8fc8f04e75b1e983ef2793c27ec7a43b287e94a F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e -F src/select.c 2fa981f5bc793fb6b48f013c82662bcc969e3af5 +F src/select.c 7996cf4b5730e80dd44a080019736e70eaef4377 F src/shell.c f0f59ea60ad297f671b7ae0fb957a736ad17c92c F src/sqlite.h.in fa62718f73553f06b2f2e362fd09ccb4e1cbb626 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad @@ -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 2dbffb3a3b20dba7d7d86c8ad2e34633f616c78a -R 83cf7865dae52d6bb8a186c1aa991823 -U dan -Z 1a0e4ed515d3bb3eb2db7f71110d453e +P ebf4bbffec58111a670c46a9eb469bfd2440b0b1 +R 573da8ac7642b42a39f669032b202b69 +U drh +Z f6d6ca2e7f0fda6cda94eef3aaa048a9 diff --git a/manifest.uuid b/manifest.uuid index 433cf093a2..579d6c185f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ebf4bbffec58111a670c46a9eb469bfd2440b0b1 \ No newline at end of file +3071ba2bdbda7018d0a285eceb04b8527209ec1e \ No newline at end of file diff --git a/src/select.c b/src/select.c index 41a3c50a58..f2ea26eaf2 100644 --- a/src/select.c +++ b/src/select.c @@ -1659,8 +1659,12 @@ int sqlite3ColumnsFromExprList( if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt); } pCol->zName = zName; - if( zName && sqlite3HashInsert(&ht, zName, pCol)==pCol ){ - db->mallocFailed = 1; + if( zName ){ + if( sqlite3HashInsert(&ht, zName, pCol)==pCol ){ + db->mallocFailed = 1; + }else if( sqlite3_strnicmp(zName, "__hidden__", 10)==0 ){ + pCol->colFlags |= COLFLAG_HIDDEN; + } } } sqlite3HashClear(&ht); From ab5a8ee3e4087c3169e1dd540208f2b6a2a6b01f Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 18 Nov 2015 20:59:47 +0000 Subject: [PATCH 19/27] Add tests for views to hidden.test. FossilOrigin-Name: 27d4b6f5756c7b19c00c95d46a77280c8b6f03a4 --- manifest | 14 +++++++------- manifest.uuid | 2 +- test/hidden.test | 46 ++++++++++++++++++++++++++++++++++------------ 3 files changed, 42 insertions(+), 20 deletions(-) diff --git a/manifest b/manifest index 34c001b3c7..e36c1904ee 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Honor\sthe\s"__hidden__"\sprefix\son\sthe\scolumns\sof\sviews. -D 2015-11-18T20:57:50.853 +C Add\stests\sfor\sviews\sto\shidden.test. +D 2015-11-18T20:59:47.725 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -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 b48497a68ad5fc428533e08df7f3743ef919e168 +F test/hidden.test e8c7623994991db181310fc876e16a0c27156a3d 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 ebf4bbffec58111a670c46a9eb469bfd2440b0b1 -R 573da8ac7642b42a39f669032b202b69 -U drh -Z f6d6ca2e7f0fda6cda94eef3aaa048a9 +P 3071ba2bdbda7018d0a285eceb04b8527209ec1e +R 2baa1dc83be9c7315702795a7e6fe14b +U dan +Z 4e931d86c42c505d1f09dcba4c9d7ade diff --git a/manifest.uuid b/manifest.uuid index 579d6c185f..38e76f7114 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3071ba2bdbda7018d0a285eceb04b8527209ec1e \ No newline at end of file +27d4b6f5756c7b19c00c95d46a77280c8b6f03a4 \ No newline at end of file diff --git a/test/hidden.test b/test/hidden.test index 2bc253c903..a9664f0e49 100644 --- a/test/hidden.test +++ b/test/hidden.test @@ -30,22 +30,44 @@ do_execsql_test 1.3 { SELECT __hidden__a, * FROM t1; } {{} 1 x y} -#do_execsql_test 2.1 { - #CREATE TABLE x1(a, b, c); - #INSERT INTO x1 VALUES(1, 2, 3); - #CREATE VIEW v1(a, b, __hidden__c) AS SELECT a, b, c FROM x1; - #SELECT * FROM v1; -#} {1 2} - -do_execsql_test 2.2 { - PRAGMA table_info(v1); +foreach {tn view} { + 1 { CREATE VIEW v1(a, b, __hidden__c) AS SELECT a, b, c FROM x1 } + 2 { CREATE VIEW v1 AS SELECT a, b, c AS __hidden__c FROM x1 } } { -0 a {} 0 {} 0 -1 b {} 0 {} 0 -2 __hidden__c {} 0 {} 0 + do_execsql_test 2.$tn.1 { + DROP TABLE IF EXISTS x1; + CREATE TABLE x1(a, b, c); + INSERT INTO x1 VALUES(1, 2, 3); + } + + catchsql { DROP VIEW v1 } + execsql $view + + do_execsql_test 2.$tn.2 { + SELECT a, b, __hidden__c FROM v1; + } {1 2 3} + + do_execsql_test 2.$tn.3 { + SELECT * FROM v1; + } {1 2} + + do_execsql_test 2.$tn.4 { + CREATE TRIGGER tr1 INSTEAD OF INSERT ON v1 BEGIN + INSERT INTO x1 VALUES(new.a, new.b, new.__hidden__c); + END; + + INSERT INTO v1 VALUES(4, 5); + SELECT * FROM x1; + } {1 2 3 4 5 {}} + + do_execsql_test 2.$tn.5 { + INSERT INTO v1(a, b, __hidden__c) VALUES(7, 8, 9); + SELECT * FROM x1; + } {1 2 3 4 5 {} 7 8 9} } + finish_test From b1daa3f469cd138dbc387d3ed91b2ba183c19d4d Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 18 Nov 2015 21:22:02 +0000 Subject: [PATCH 20/27] Get the __hidden__ column mechanism working on views with INSTEAD OF triggers. FossilOrigin-Name: 20c1e9ce75cc0b5f7456379f35a4fe24edd98088 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/insert.c | 10 +++++----- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index e36c1904ee..856258b350 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\stests\sfor\sviews\sto\shidden.test. -D 2015-11-18T20:59:47.725 +C Get\sthe\s__hidden__\scolumn\smechanism\sworking\son\sviews\swith\sINSTEAD\sOF\striggers. +D 2015-11-18T21:22:02.852 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -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 0b376795f688aafd264ff0c5a6538e5a4cc6c213 +F src/insert.c 0cf9a847a0a03b4fe932f1adfa69165802d5250b F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e F src/loadext.c 18586e45a215325f15096821e9c082035d4fb810 @@ -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 3071ba2bdbda7018d0a285eceb04b8527209ec1e -R 2baa1dc83be9c7315702795a7e6fe14b -U dan -Z 4e931d86c42c505d1f09dcba4c9d7ade +P 27d4b6f5756c7b19c00c95d46a77280c8b6f03a4 +R d79a926a0045cbb3f30ec72ca51f379c +U drh +Z c4fa45b9d058451cddc1ea846764a52e diff --git a/manifest.uuid b/manifest.uuid index 38e76f7114..f5b8db47ca 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -27d4b6f5756c7b19c00c95d46a77280c8b6f03a4 \ No newline at end of file +20c1e9ce75cc0b5f7456379f35a4fe24edd98088 \ No newline at end of file diff --git a/src/insert.c b/src/insert.c index 2c159fd2bc..aa3eb91114 100644 --- a/src/insert.c +++ b/src/insert.c @@ -833,15 +833,14 @@ void sqlite3Insert( /* Create the new column data */ - for(i=0; inCol; i++){ - if( pColumn==0 ){ - j = i; - }else{ + for(i=j=0; inCol; i++){ + if( pColumn ){ for(j=0; jnId; j++){ if( pColumn->a[j].idx==i ) break; } } - if( (!useTempTable && !pList) || (pColumn && j>=pColumn->nId) ){ + if( (!useTempTable && !pList) || (pColumn && j>=pColumn->nId) + || (pColumn==0 && IsHiddenColumn(&pTab->aCol[i])) ){ sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regCols+i+1); }else if( useTempTable ){ sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, regCols+i+1); @@ -849,6 +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 this is an INSERT on a view with an INSTEAD OF INSERT trigger, From a6f88ffd3ae12f8b6b38b8ece8d9ffe5608a87a0 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 19 Nov 2015 13:21:31 +0000 Subject: [PATCH 21/27] Fix a 10-year-old misguided attempt at parser performance improvement that actually made parsing slightly slower. FossilOrigin-Name: 3833cbac0706ecac9a641d70b786d26f7e1a42b1 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/build.c | 15 +-------------- 3 files changed, 9 insertions(+), 22 deletions(-) diff --git a/manifest b/manifest index 3977bc21ce..7b6fa36f04 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\susing\smmap\smode\son\sWin32,\suse\sa\sread-only\smapping\sby\sdefault.\sWrite\sto\sthe\sdatabase\sfile\susing\sWriteFile().\sUnless\sSQLITE_MMAP_READWRITE\sis\sdefined,\sin\swhich\scase\suse\sa\sread/write\smapping\sand\swrite\sinto\sthe\sfile\susing\smemcpy(). -D 2015-11-17T21:42:32.347 +C Fix\sa\s10-year-old\smisguided\sattempt\sat\sparser\sperformance\simprovement\sthat\nactually\smade\sparsing\sslightly\sslower. +D 2015-11-19T13:21:31.911 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 ca574d33ffb1763cfd2979383f4d507095bfbe19 +F src/build.c baee971344208e212573c08f6bd5579023cc5d14 F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0 F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f F src/ctime.c 509ef9c64d1321f42448f111da86400b1799218a @@ -1403,7 +1403,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 67c5d3c646c8198c8637069140aca952b802df25 -R d582abf646ba97a05dcf7955b3e63a88 -U mistachkin -Z 3d22a16f35aefddddac7e9c38e41c6d4 +P 4f521b5bb36a1117db324e92dcf80abd2f1a5bc1 +R cfcad521008e112c6b761003fe8dc627 +U drh +Z 7e2a0f5e909f9722ed5527dda015ff6e diff --git a/manifest.uuid b/manifest.uuid index f18cecb173..25fa29f661 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4f521b5bb36a1117db324e92dcf80abd2f1a5bc1 \ No newline at end of file +3833cbac0706ecac9a641d70b786d26f7e1a42b1 \ No newline at end of file diff --git a/src/build.c b/src/build.c index 8cb2d44ac7..a46bb58520 100644 --- a/src/build.c +++ b/src/build.c @@ -1049,19 +1049,6 @@ begin_table_error: return; } -/* -** This macro is used to compare two strings in a case-insensitive manner. -** It is slightly faster than calling sqlite3StrICmp() directly, but -** produces larger code. -** -** WARNING: This macro is not compatible with the strcmp() family. It -** returns true if the two strings are equal, otherwise false. -*/ -#define STRICMP(x, y) (\ -sqlite3UpperToLower[*(unsigned char *)(x)]== \ -sqlite3UpperToLower[*(unsigned char *)(y)] \ -&& sqlite3StrICmp((x)+1,(y)+1)==0 ) - /* ** Add a new column to the table currently being constructed. ** @@ -1086,7 +1073,7 @@ void sqlite3AddColumn(Parse *pParse, Token *pName){ z = sqlite3NameFromToken(db, pName); if( z==0 ) return; for(i=0; inCol; i++){ - if( STRICMP(z, p->aCol[i].zName) ){ + if( sqlite3_stricmp(z, p->aCol[i].zName)==0 ){ sqlite3ErrorMsg(pParse, "duplicate column name: %s", z); sqlite3DbFree(db, z); return; From 03d69a682696fd6bfcb948b43e252f1126928cfb Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 19 Nov 2015 13:53:57 +0000 Subject: [PATCH 22/27] Only support the magic "__hidden__" column name prefix interpretation when compiled with SQLITE_ENABLE_HIDDEN_COLUMNS. FossilOrigin-Name: 5490646b2eb74ea8bd5ab2690f69b9c707a0165f --- manifest | 24 ++++++++++++------------ manifest.uuid | 2 +- src/build.c | 16 +++++++++++++--- src/insert.c | 6 ++---- src/select.c | 16 +++++----------- src/sqliteInt.h | 20 +++++++++++++++++++- src/test_config.c | 6 ++++++ test/hidden.test | 9 +++++---- test/releasetest.tcl | 3 +++ 9 files changed, 66 insertions(+), 36 deletions(-) diff --git a/manifest b/manifest index 856258b350..8fd60806d4 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index f5b8db47ca..0201a434ee 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -20c1e9ce75cc0b5f7456379f35a4fe24edd98088 \ No newline at end of file +5490646b2eb74ea8bd5ab2690f69b9c707a0165f \ No newline at end of file diff --git a/src/build.c b/src/build.c index 9a4a0cc8d4..65f94d2348 100644 --- a/src/build.c +++ b/src/build.c @@ -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 diff --git a/src/insert.c b/src/insert.c index aa3eb91114..d1226ee276 100644 --- a/src/insert.c +++ b/src/insert.c @@ -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{ diff --git a/src/select.c b/src/select.c index f2ea26eaf2..793171f93c 100644 --- a/src/select.c +++ b/src/select.c @@ -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; diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 0a1eb770f7..788b348fbd 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -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); diff --git a/src/test_config.c b/src/test_config.c index 4cb5c0057a..b84424bbdc 100644 --- a/src/test_config.c +++ b/src/test_config.c @@ -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 diff --git a/test/hidden.test b/test/hidden.test index a9664f0e49..07a370c4a5 100644 --- a/test/hidden.test +++ b/test/hidden.test @@ -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 diff --git a/test/releasetest.tcl b/test/releasetest.tcl index f9c4406d40..7f53fd1523 100644 --- a/test/releasetest.tcl +++ b/test/releasetest.tcl @@ -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 } From 1a1d3cd2f3b9d9dadf50fe84c839e7d7c8b00488 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 19 Nov 2015 16:33:31 +0000 Subject: [PATCH 23/27] Create the new TK_ASTERISK token to represent the "*" in "SELECT *". Formerly that operator was TK_ALL, which was also used for UNION ALL. Less confusion if they operator symbols are distinct. FossilOrigin-Name: 201ac6d449431dadc6b29faecd68b559bd64bc9f --- manifest | 19 +++++++++---------- manifest.uuid | 2 +- src/insert.c | 2 +- src/parse.y | 6 +++--- src/select.c | 19 +++++++++++-------- tool/addopcodes.tcl | 1 + 6 files changed, 26 insertions(+), 23 deletions(-) diff --git a/manifest b/manifest index 10477abd8d..e87f64889b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C If\scompiled\swith\sSQLITE_ENABLE_HIDDEN_COLUMNS,\sthen\scolumns\sin\sordinary\ntables\sand\sviews\sthat\shave\snames\sbeginning\swith\s"__hidden__"\sare\somitted\sfrom\nthe\s"*"\sexpansion\sin\sSELECT\sstatements\sand\sfrom\sthe\sautomatic\slist\sof\scolumns\nfollowing\sthe\stable\sname\sin\san\sINSERT\sINTO\sstatement. -D 2015-11-19T14:11:58.858 +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 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -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 6677454f256e7992c68a6460b0224a7ec60ef5ed +F src/insert.c 7aa0846b25ab53e33a16fc3b9417ff87b3c60183 F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e F src/loadext.c 18586e45a215325f15096821e9c082035d4fb810 @@ -328,7 +328,7 @@ F src/os_win.c 2d77dab5c555a18c0aff379c6a692fc3499044d9 F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca F src/pager.c 18341e2b759b447cbc82fb9215d08d9c5864e92e F src/pager.h 87c4118a71ba3965184148b379a6d93179071091 -F src/parse.y aad5cc866dc23719f361fe7e0b8eaec8ce4861a4 +F src/parse.y 23737e649c26ce327603799e57f5c2ff50e5e6ba F src/pcache.c 73895411fa6b7bd6f0091212feabbe833b358d23 F src/pcache.h 1ff11adce609ba7de139b6abfabaf9a2bac947b5 F src/pcache1.c 902e1bc7bdaa81b40f8543407c5e2ac8ef4dc035 @@ -339,7 +339,7 @@ F src/printf.c f8fc8f04e75b1e983ef2793c27ec7a43b287e94a F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e -F src/select.c ac980e5b70478aab235d12b4565a745814453858 +F src/select.c e8eccb5b4482965f56fc46c69e75ce2da941b18e F src/shell.c f0f59ea60ad297f671b7ae0fb957a736ad17c92c F src/sqlite.h.in fa62718f73553f06b2f2e362fd09ccb4e1cbb626 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad @@ -1345,7 +1345,7 @@ F test/zeroblob.test 3857870fe681b8185654414a9bccfde80b62a0fa F test/zerodamage.test cf6748bad89553cc1632be51a6f54e487e4039ac F tool/GetFile.cs a15e08acb5dd7539b75ba23501581d7c2b462cb5 F tool/GetTclKit.bat 8606413d3035c05373a0d7fae82ebf59ae9e16c3 -F tool/addopcodes.tcl f1fd17b639910226749d1ae006beef8f60378274 +F tool/addopcodes.tcl 4ca9c3ef196f08da30add5d07ce0c9458dc8c633 F tool/build-all-msvc.bat e42141ca3c3812315432f9813ef9eb78aa8d99c9 x F tool/build-shell.sh 950f47c6174f1eea171319438b93ba67ff5bf367 F tool/cg_anno.tcl 692ce4b8693d59e3a3de77ca97f4139ecfa641b0 x @@ -1404,8 +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 3833cbac0706ecac9a641d70b786d26f7e1a42b1 5490646b2eb74ea8bd5ab2690f69b9c707a0165f -R 4afe49c98c7e846f7bc0bfa4d2728afc -T +closed 5490646b2eb74ea8bd5ab2690f69b9c707a0165f +P 011904cad2be2ce34e2f37ffae8ff2f1044a2969 +R 40ad63765b750992e100464bfa82981f U drh -Z 1e726fa67e18842e3c05f4f72e06c5dc +Z 1545ad0787e026d6592cfaa98e731337 diff --git a/manifest.uuid b/manifest.uuid index 3567556e2e..7707d8b725 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -011904cad2be2ce34e2f37ffae8ff2f1044a2969 \ No newline at end of file +201ac6d449431dadc6b29faecd68b559bd64bc9f \ No newline at end of file diff --git a/src/insert.c b/src/insert.c index d1226ee276..618b2dee7b 100644 --- a/src/insert.c +++ b/src/insert.c @@ -1873,7 +1873,7 @@ static int xferOptimization( return 0; /* The result set must have exactly one column */ } assert( pEList->a[0].pExpr ); - if( pEList->a[0].pExpr->op!=TK_ALL ){ + if( pEList->a[0].pExpr->op!=TK_ASTERISK ){ return 0; /* The result set must be the special operator "*" */ } diff --git a/src/parse.y b/src/parse.y index e504e64548..6ac2be21f2 100644 --- a/src/parse.y +++ b/src/parse.y @@ -546,7 +546,7 @@ distinct(A) ::= . {A = 0;} // selcollist is a list of expressions that are to become the return // values of the SELECT statement. The "*" in statements like // "SELECT * FROM ..." is encoded as a special expression with an -// opcode of TK_ALL. +// opcode of TK_ASTERISK. // %type selcollist {ExprList*} %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);} @@ -560,11 +560,11 @@ selcollist(A) ::= sclp(P) expr(X) as(Y). { sqlite3ExprListSetSpan(pParse,A,&X); } selcollist(A) ::= sclp(P) STAR. { - Expr *p = sqlite3Expr(pParse->db, TK_ALL, 0); + Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0); A = sqlite3ExprListAppend(pParse, P, p); } selcollist(A) ::= sclp(P) nm(X) DOT STAR(Y). { - Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &Y); + Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0, &Y); Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &X); Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0); A = sqlite3ExprListAppend(pParse,P, pDot); diff --git a/src/select.c b/src/select.c index 793171f93c..2cf190b34c 100644 --- a/src/select.c +++ b/src/select.c @@ -118,7 +118,7 @@ Select *sqlite3SelectNew( memset(pNew, 0, sizeof(*pNew)); } if( pEList==0 ){ - pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db,TK_ALL,0)); + pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db,TK_ASTERISK,0)); } pNew->pEList = pEList; if( pSrc==0 ) pSrc = sqlite3DbMallocZero(db, sizeof(*pSrc)); @@ -3938,7 +3938,7 @@ static int convertCompoundSelectToSubquery(Walker *pWalker, Select *p){ if( pNewSrc==0 ) return WRC_Abort; *pNew = *p; p->pSrc = pNewSrc; - p->pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ALL, 0)); + p->pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ASTERISK, 0)); p->op = TK_SELECT; p->pWhere = 0; pNew->pGroupBy = 0; @@ -4279,19 +4279,20 @@ static int selectExpander(Walker *pWalker, Select *p){ /* For every "*" that occurs in the column list, insert the names of ** all columns in all tables. And for every TABLE.* insert the names ** of all columns in TABLE. The parser inserted a special expression - ** with the TK_ALL operator for each "*" that it found in the column list. - ** The following code just has to locate the TK_ALL expressions and expand - ** each one to the list of all columns in all tables. + ** with the TK_ASTERISK operator for each "*" that it found in the column + ** list. The following code just has to locate the TK_ASTERISK + ** expressions and expand each one to the list of all columns in + ** all tables. ** ** The first loop just checks to see if there are any "*" operators ** that need expanding. */ for(k=0; knExpr; k++){ pE = pEList->a[k].pExpr; - if( pE->op==TK_ALL ) break; + if( pE->op==TK_ASTERISK ) break; assert( pE->op!=TK_DOT || pE->pRight!=0 ); assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) ); - if( pE->op==TK_DOT && pE->pRight->op==TK_ALL ) break; + if( pE->op==TK_DOT && pE->pRight->op==TK_ASTERISK ) break; } if( knExpr ){ /* @@ -4309,7 +4310,9 @@ static int selectExpander(Walker *pWalker, Select *p){ pE = a[k].pExpr; pRight = pE->pRight; assert( pE->op!=TK_DOT || pRight!=0 ); - if( pE->op!=TK_ALL && (pE->op!=TK_DOT || pRight->op!=TK_ALL) ){ + if( pE->op!=TK_ASTERISK + && (pE->op!=TK_DOT || pRight->op!=TK_ASTERISK) + ){ /* This particular expression does not need to be expanded. */ pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr); diff --git a/tool/addopcodes.tcl b/tool/addopcodes.tcl index bd0b73a35f..84e3994ce8 100644 --- a/tool/addopcodes.tcl +++ b/tool/addopcodes.tcl @@ -37,6 +37,7 @@ set extras { UMINUS UPLUS REGISTER + ASTERISK SPACE ILLEGAL } From ba68f8f3f58437deaea3d1bb26ca44a09faa837f Mon Sep 17 00:00:00 2001 From: dan Date: Thu, 19 Nov 2015 16:46:46 +0000 Subject: [PATCH 24/27] Fix problems with INSERT INTO ... SELECT ... statements that write to tables with __hidden__ columns. FossilOrigin-Name: 59bd0ec7d4327852ee8c0206b2c59d0a12484db8 --- manifest | 22 +++++++++++----------- manifest.uuid | 2 +- src/build.c | 6 ++++-- src/insert.c | 5 +++++ src/select.c | 2 +- src/sqliteInt.h | 2 +- test/hidden.test | 29 ++++++++++++++++++++++++++++- 7 files changed, 51 insertions(+), 17 deletions(-) diff --git a/manifest b/manifest index e87f64889b..5beeb22a50 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 7707d8b725..44fcfa5cdd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -201ac6d449431dadc6b29faecd68b559bd64bc9f \ No newline at end of file +59bd0ec7d4327852ee8c0206b2c59d0a12484db8 \ No newline at end of file diff --git a/src/build.c b/src/build.c index 0e8d4cf0ea..f928ba3075 100644 --- a/src/build.c +++ b/src/build.c @@ -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 diff --git a/src/insert.c b/src/insert.c index 618b2dee7b..4b8ed22106 100644 --- a/src/insert.c +++ b/src/insert.c @@ -1909,6 +1909,11 @@ static int xferOptimization( for(i=0; inCol; 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 */ } diff --git a/src/select.c b/src/select.c index 2cf190b34c..967023420c 100644 --- a/src/select.c +++ b/src/select.c @@ -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; } diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 788b348fbd..50a0c97eb0 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -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); diff --git a/test/hidden.test b/test/hidden.test index 07a370c4a5..9914a6ed10 100644 --- a/test/hidden.test +++ b/test/hidden.test @@ -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 From 80090f922137f4134e43af284956fa5acd9151c0 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 19 Nov 2015 17:55:11 +0000 Subject: [PATCH 25/27] When manifesting a view as part of an DELETE or UPDATE, be sure to include the hidden columns in the manifestation. FossilOrigin-Name: 28df5dc4a9569f388af2ee0d1f016afbea132277 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/delete.c | 3 ++- src/select.c | 9 ++++++--- src/sqliteInt.h | 3 ++- 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index 5beeb22a50..6941675b3d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -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 +C When\smanifesting\sa\sview\sas\spart\sof\san\sDELETE\sor\sUPDATE,\sbe\ssure\sto\sinclude\nthe\shidden\scolumns\sin\sthe\smanifestation. +D 2015-11-19T17:55:11.376 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -291,7 +291,7 @@ F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f F src/ctime.c 509ef9c64d1321f42448f111da86400b1799218a F src/date.c fb1c99172017dcc8e237339132c91a21a0788584 F src/dbstat.c ffd63fc8ba7541476ced189b95e95d7f2bc63f78 -F src/delete.c c4c6fb9da78b946fcba2a6aac5b24bc5c15e752a +F src/delete.c 00af9f08a15ddc5cba5962d3d3e5bf2d67b2e7da F src/expr.c 0080c0f12806eca91e75a23a121a68918e9da357 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c 31900763094a3736a5fc887469202eb579fef2d0 @@ -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 3492a2794b8ff04dce2a91a284492df5725045f5 +F src/select.c 2376d320907a5c28c55290f18fd94aa3400bf97c 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 921678cb43bb7f63364e56757c07f3e6e0eb45c6 +F src/sqliteInt.h d8dc20e7b0e12cf5fd85f43a2abad99eb6f66d9b F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46 F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e @@ -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 201ac6d449431dadc6b29faecd68b559bd64bc9f -R 1ed430a49a13a08f14d4334a2efebccc -U dan -Z 390e482d41754a020737571e763bbfaa +P 59bd0ec7d4327852ee8c0206b2c59d0a12484db8 +R 626878acc4dd3cd8e822d0d9711e48d6 +U drh +Z 65ef55c8781837190650d43297c4895a diff --git a/manifest.uuid b/manifest.uuid index 44fcfa5cdd..17f91d54c7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -59bd0ec7d4327852ee8c0206b2c59d0a12484db8 \ No newline at end of file +28df5dc4a9569f388af2ee0d1f016afbea132277 \ No newline at end of file diff --git a/src/delete.c b/src/delete.c index cd683e37d8..ed273bde81 100644 --- a/src/delete.c +++ b/src/delete.c @@ -106,7 +106,8 @@ void sqlite3MaterializeView( assert( pFrom->a[0].pOn==0 ); assert( pFrom->a[0].pUsing==0 ); } - pSel = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, 0, 0, 0, 0); + pSel = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, 0, + SF_IncludeHidden, 0, 0); sqlite3SelectDestInit(&dest, SRT_EphemTab, iCur); sqlite3Select(pParse, pSel, &dest); sqlite3SelectDelete(db, pSel); diff --git a/src/select.c b/src/select.c index 967023420c..3d69dfb03a 100644 --- a/src/select.c +++ b/src/select.c @@ -4364,10 +4364,13 @@ static int selectExpander(Walker *pWalker, Select *p){ continue; } - /* If a column is marked as 'hidden', do not include it in - ** the expanded result-set list. + /* If a column is marked as 'hidden', omit it from the expanded + ** result-set list unless the SELECT has the SF_IncludeHidden + ** bit set. */ - if( IsHiddenColumn(&pTab->aCol[j]) ){ + if( (p->selFlags & SF_IncludeHidden)==0 + && IsHiddenColumn(&pTab->aCol[j]) + ){ continue; } tableSeen = 1; diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 50a0c97eb0..ea1ccda88b 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -1673,7 +1673,7 @@ struct Table { /* ** Allowed values for Table.tabFlags. ** -** TF_OOOHidden applies to virtual tables that have hidden columns that are +** TF_OOOHidden applies to tables or view that have hidden columns that are ** followed by non-hidden columns. Example: "CREATE VIRTUAL TABLE x USING ** vtab1(a HIDDEN, b);". Since "b" is a non-hidden column but "a" is hidden, ** the TF_OOOHidden attribute would apply in this case. Such tables require @@ -2512,6 +2512,7 @@ struct Select { #define SF_MinMaxAgg 0x1000 /* Aggregate containing min() or max() */ #define SF_Recursive 0x2000 /* The recursive part of a recursive CTE */ #define SF_Converted 0x4000 /* By convertCompoundSelectToSubquery() */ +#define SF_IncludeHidden 0x8000 /* Include hidden columns in output */ /* From aaea31439d595e2d64043da8c424d84b77fe9ca5 Mon Sep 17 00:00:00 2001 From: dan Date: Thu, 19 Nov 2015 18:09:05 +0000 Subject: [PATCH 26/27] Fix a problem with VACUUM and __hidden__ columns. FossilOrigin-Name: 13995756ad8b80568aa2f74387788a8cab1123ef --- manifest | 16 +++++++-------- manifest.uuid | 2 +- src/insert.c | 4 +++- test/hidden.test | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 6941675b3d..4c993920d8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\smanifesting\sa\sview\sas\spart\sof\san\sDELETE\sor\sUPDATE,\sbe\ssure\sto\sinclude\nthe\shidden\scolumns\sin\sthe\smanifestation. -D 2015-11-19T17:55:11.376 +C Fix\sa\sproblem\swith\sVACUUM\sand\s__hidden__\scolumns. +D 2015-11-19T18:09:05.518 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -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 edb295a0b669e2dedba65cd546789770ae061277 +F src/insert.c e1d20ae8979e25519c2670233718676bedcfedc9 F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e F src/loadext.c 18586e45a215325f15096821e9c082035d4fb810 @@ -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 df1540ad1017b49a0681ba3b01e0cde051dbeb58 +F test/hidden.test 23c1393a79e846d68fd902d72c85d5e5dcf98711 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 59bd0ec7d4327852ee8c0206b2c59d0a12484db8 -R 626878acc4dd3cd8e822d0d9711e48d6 -U drh -Z 65ef55c8781837190650d43297c4895a +P 28df5dc4a9569f388af2ee0d1f016afbea132277 +R 223c84fbd92f4a39a8e2bec8517a666e +U dan +Z 81a0a463975756dda288ce492d814635 diff --git a/manifest.uuid b/manifest.uuid index 17f91d54c7..6e20668ab2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -28df5dc4a9569f388af2ee0d1f016afbea132277 \ No newline at end of file +13995756ad8b80568aa2f74387788a8cab1123ef \ No newline at end of file diff --git a/src/insert.c b/src/insert.c index 4b8ed22106..52769e9c4f 100644 --- a/src/insert.c +++ b/src/insert.c @@ -1910,7 +1910,9 @@ static int xferOptimization( Column *pDestCol = &pDest->aCol[i]; Column *pSrcCol = &pSrc->aCol[i]; #ifdef SQLITE_ENABLE_HIDDEN_COLUMNS - if( (pDestCol->colFlags | pSrcCol->colFlags) & COLFLAG_HIDDEN ){ + if( (db->flags & SQLITE_Vacuum)==0 + && (pDestCol->colFlags | pSrcCol->colFlags) & COLFLAG_HIDDEN + ){ return 0; /* Neither table may have __hidden__ columns */ } #endif diff --git a/test/hidden.test b/test/hidden.test index 9914a6ed10..1db2cad12e 100644 --- a/test/hidden.test +++ b/test/hidden.test @@ -98,4 +98,56 @@ do_execsql_test 3.2.3 { SELECT __hidden__a FROM t5; } {{} {} {}} + +do_execsql_test 3.3.1 { + CREATE TABLE t5a(a, b, __hidden__c); + CREATE TABLE t6a(a, b, __hidden__c); + INSERT INTO t6a(a, b, __hidden__c) VALUES(1, 2, 3); + INSERT INTO t6a(a, b, __hidden__c) VALUES(4, 5, 6); + INSERT INTO t6a(a, b, __hidden__c) VALUES(7, 8, 9); +} + +do_execsql_test 3.3.2 { + INSERT INTO t5a SELECT * FROM t6a; + SELECT * FROM t5a; +} {1 2 4 5 7 8} + +do_execsql_test 3.3.3 { + SELECT __hidden__c FROM t5a; +} {{} {} {}} + +do_execsql_test 3.4.1 { + CREATE TABLE t5b(a, __hidden__b, c); + CREATE TABLE t6b(a, b, __hidden__c); + INSERT INTO t6b(a, b, __hidden__c) VALUES(1, 2, 3); + INSERT INTO t6b(a, b, __hidden__c) VALUES(4, 5, 6); + INSERT INTO t6b(a, b, __hidden__c) VALUES(7, 8, 9); +} + +do_execsql_test 3.4.2 { + INSERT INTO t5b SELECT * FROM t6b; + SELECT * FROM t5b; +} {1 2 4 5 7 8} + +do_execsql_test 3.4.3 { + SELECT __hidden__b FROM t5b; +} {{} {} {}} + +#------------------------------------------------------------------------- +# Test VACUUM +# +reset_db +do_execsql_test 4.1 { + CREATE TABLE t1(a, __hidden__b, c UNIQUE); + INSERT INTO t1(a, __hidden__b, c) VALUES(1, 2, 3); + INSERT INTO t1(a, __hidden__b, c) VALUES(4, 5, 6); + INSERT INTO t1(a, __hidden__b, c) VALUES(7, 8, 9); + DELETE FROM t1 WHERE __hidden__b = 5; + SELECT rowid, a, __hidden__b, c FROM t1; +} {1 1 2 3 3 7 8 9} +do_execsql_test 4.2 { + VACUUM; + SELECT rowid, a, __hidden__b, c FROM t1; +} {1 1 2 3 3 7 8 9} + finish_test From 18f8e73453be7c7a2394824739e890a4d4e8cad0 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 19 Nov 2015 18:11:20 +0000 Subject: [PATCH 27/27] Fix problems with the way the IsHiddenColumn() macro is defined. FossilOrigin-Name: 126b998cf163dcdd5a222634f1e929f04db3c700 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/sqliteInt.h | 3 +-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 4c993920d8..d831f3f7cd 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sproblem\swith\sVACUUM\sand\s__hidden__\scolumns. -D 2015-11-19T18:09:05.518 +C Fix\sproblems\swith\sthe\sway\sthe\sIsHiddenColumn()\smacro\sis\sdefined. +D 2015-11-19T18:11:20.451 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc e928e68168df69b353300ac87c10105206653a03 @@ -344,7 +344,7 @@ 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 d8dc20e7b0e12cf5fd85f43a2abad99eb6f66d9b +F src/sqliteInt.h 25d0792e6d355a27975dc7c49c4514b3f6eb2294 F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46 F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e @@ -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 28df5dc4a9569f388af2ee0d1f016afbea132277 -R 223c84fbd92f4a39a8e2bec8517a666e -U dan -Z 81a0a463975756dda288ce492d814635 +P 13995756ad8b80568aa2f74387788a8cab1123ef +R 7d5fbb49b212de9edfd34eb075dc8992 +U drh +Z bc25bafe8827ab2ba48c52405ca8c198 diff --git a/manifest.uuid b/manifest.uuid index 6e20668ab2..3e5e242be0 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -13995756ad8b80568aa2f74387788a8cab1123ef \ No newline at end of file +126b998cf163dcdd5a222634f1e929f04db3c700 \ No newline at end of file diff --git a/src/sqliteInt.h b/src/sqliteInt.h index ea1ccda88b..2e1adb82e6 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -1698,7 +1698,6 @@ struct Table { # define IsVirtual(X) (((X)->tabFlags & TF_Virtual)!=0) #else # define IsVirtual(X) 0 -# define IsHiddenColumn(X) 0 #endif /* @@ -1710,7 +1709,7 @@ struct Table { #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) +#elif !defined(SQLITE_OMIT_VIRTUALTABLE) # define IsHiddenColumn(X) (((X)->colFlags & COLFLAG_HIDDEN)!=0) # define IsOrdinaryHiddenColumn(X) 0 #else