mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: cfd110bf5db2c1993a5e2ca718648bd9c17ee22c
This commit is contained in:
@@ -403,12 +403,14 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
|
|||||||
/* Step 2 */
|
/* Step 2 */
|
||||||
switch( z[1] ){
|
switch( z[1] ){
|
||||||
case 'a':
|
case 'a':
|
||||||
stem(&z, "lanoita", "ate", m_gt_0) ||
|
if( !stem(&z, "lanoita", "ate", m_gt_0) ){
|
||||||
stem(&z, "lanoit", "tion", m_gt_0);
|
stem(&z, "lanoit", "tion", m_gt_0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
stem(&z, "icne", "ence", m_gt_0) ||
|
if( !stem(&z, "icne", "ence", m_gt_0) ){
|
||||||
stem(&z, "icna", "ance", m_gt_0);
|
stem(&z, "icna", "ance", m_gt_0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
stem(&z, "rezi", "ize", m_gt_0);
|
stem(&z, "rezi", "ize", m_gt_0);
|
||||||
@@ -417,43 +419,54 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
|
|||||||
stem(&z, "igol", "log", m_gt_0);
|
stem(&z, "igol", "log", m_gt_0);
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
stem(&z, "ilb", "ble", m_gt_0) ||
|
if( !stem(&z, "ilb", "ble", m_gt_0)
|
||||||
stem(&z, "illa", "al", m_gt_0) ||
|
&& !stem(&z, "illa", "al", m_gt_0)
|
||||||
stem(&z, "iltne", "ent", m_gt_0) ||
|
&& !stem(&z, "iltne", "ent", m_gt_0)
|
||||||
stem(&z, "ile", "e", m_gt_0) ||
|
&& !stem(&z, "ile", "e", m_gt_0)
|
||||||
stem(&z, "ilsuo", "ous", m_gt_0);
|
){
|
||||||
|
stem(&z, "ilsuo", "ous", m_gt_0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
stem(&z, "noitazi", "ize", m_gt_0) ||
|
if( !stem(&z, "noitazi", "ize", m_gt_0)
|
||||||
stem(&z, "noita", "ate", m_gt_0) ||
|
&& !stem(&z, "noita", "ate", m_gt_0)
|
||||||
stem(&z, "rota", "ate", m_gt_0);
|
){
|
||||||
|
stem(&z, "rota", "ate", m_gt_0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
stem(&z, "msila", "al", m_gt_0) ||
|
if( !stem(&z, "msila", "al", m_gt_0)
|
||||||
stem(&z, "ssenevi", "ive", m_gt_0) ||
|
&& !stem(&z, "ssenevi", "ive", m_gt_0)
|
||||||
stem(&z, "ssenluf", "ful", m_gt_0) ||
|
&& !stem(&z, "ssenluf", "ful", m_gt_0)
|
||||||
stem(&z, "ssensuo", "ous", m_gt_0);
|
){
|
||||||
|
stem(&z, "ssensuo", "ous", m_gt_0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
stem(&z, "itila", "al", m_gt_0) ||
|
if( !stem(&z, "itila", "al", m_gt_0)
|
||||||
stem(&z, "itivi", "ive", m_gt_0) ||
|
&& !stem(&z, "itivi", "ive", m_gt_0)
|
||||||
stem(&z, "itilib", "ble", m_gt_0);
|
){
|
||||||
|
stem(&z, "itilib", "ble", m_gt_0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Step 3 */
|
/* Step 3 */
|
||||||
switch( z[0] ){
|
switch( z[0] ){
|
||||||
case 'e':
|
case 'e':
|
||||||
stem(&z, "etaci", "ic", m_gt_0) ||
|
if( !stem(&z, "etaci", "ic", m_gt_0)
|
||||||
stem(&z, "evita", "", m_gt_0) ||
|
&& !stem(&z, "evita", "", m_gt_0)
|
||||||
stem(&z, "ezila", "al", m_gt_0);
|
){
|
||||||
|
stem(&z, "ezila", "al", m_gt_0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
stem(&z, "itici", "ic", m_gt_0);
|
stem(&z, "itici", "ic", m_gt_0);
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
stem(&z, "laci", "ic", m_gt_0) ||
|
if( !stem(&z, "laci", "ic", m_gt_0) ){
|
||||||
stem(&z, "luf", "", m_gt_0);
|
stem(&z, "luf", "", m_gt_0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
stem(&z, "ssen", "", m_gt_0);
|
stem(&z, "ssen", "", m_gt_0);
|
||||||
@@ -494,9 +507,11 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
|
|||||||
z += 3;
|
z += 3;
|
||||||
}
|
}
|
||||||
}else if( z[2]=='e' ){
|
}else if( z[2]=='e' ){
|
||||||
stem(&z, "tneme", "", m_gt_1) ||
|
if( !stem(&z, "tneme", "", m_gt_1)
|
||||||
stem(&z, "tnem", "", m_gt_1) ||
|
&& !stem(&z, "tnem", "", m_gt_1)
|
||||||
stem(&z, "tne", "", m_gt_1);
|
){
|
||||||
|
stem(&z, "tne", "", m_gt_1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -515,8 +530,9 @@ static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
stem(&z, "eta", "", m_gt_1) ||
|
if( !stem(&z, "eta", "", m_gt_1) ){
|
||||||
stem(&z, "iti", "", m_gt_1);
|
stem(&z, "iti", "", m_gt_1);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'u':
|
case 'u':
|
||||||
if( z[0]=='s' && z[2]=='o' && m_gt_1(z+3) ){
|
if( z[0]=='s' && z[2]=='o' && m_gt_1(z+3) ){
|
||||||
|
4
main.mk
4
main.mk
@@ -395,7 +395,7 @@ mptester$(EXE): sqlite3.c $(TOP)/mptest/mptest.c
|
|||||||
$(TLIBS) $(THREADLIB)
|
$(TLIBS) $(THREADLIB)
|
||||||
|
|
||||||
sqlite3.o: sqlite3.c
|
sqlite3.o: sqlite3.c
|
||||||
$(TCCX) -c sqlite3.c
|
$(TCCX) -I. -c sqlite3.c
|
||||||
|
|
||||||
# This target creates a directory named "tsrc" and fills it with
|
# This target creates a directory named "tsrc" and fills it with
|
||||||
# copies of all of the C source code and header files needed to
|
# copies of all of the C source code and header files needed to
|
||||||
@@ -642,7 +642,7 @@ wordcount$(EXE): $(TOP)/test/wordcount.c sqlite3.c
|
|||||||
$(TOP)/test/wordcount.c sqlite3.c
|
$(TOP)/test/wordcount.c sqlite3.c
|
||||||
|
|
||||||
speedtest1$(EXE): $(TOP)/test/speedtest1.c sqlite3.o
|
speedtest1$(EXE): $(TOP)/test/speedtest1.c sqlite3.o
|
||||||
$(TCC) -o speedtest1$(EXE) $(TOP)/test/speedtest1.c sqlite3.o $(THREADLIB)
|
$(TCC) -I. -o speedtest1$(EXE) $(TOP)/test/speedtest1.c sqlite3.o $(THREADLIB)
|
||||||
|
|
||||||
# This target will fail if the SQLite amalgamation contains any exported
|
# This target will fail if the SQLite amalgamation contains any exported
|
||||||
# symbols that do not begin with "sqlite3_". It is run as part of the
|
# symbols that do not begin with "sqlite3_". It is run as part of the
|
||||||
|
101
manifest
101
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Merge\sin\sall\srecent\spreformance\senhancements\sfrom\strunk.
|
C Merge\sthe\slatest\strunk\schanges\sinto\sthe\ssessions\sbranch.
|
||||||
D 2013-12-14T18:24:46.659
|
D 2013-12-24T12:09:42.648
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in e4ee6d36cdf6136aee0158675a3b24dd3bf31a5a
|
F Makefile.in e4ee6d36cdf6136aee0158675a3b24dd3bf31a5a
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -86,7 +86,7 @@ F ext/fts3/fts3_expr.c 5165c365cb5a035f5be8bb296f7aa3211d43e4ac
|
|||||||
F ext/fts3/fts3_hash.c 8dd2d06b66c72c628c2732555a32bc0943114914
|
F ext/fts3/fts3_hash.c 8dd2d06b66c72c628c2732555a32bc0943114914
|
||||||
F ext/fts3/fts3_hash.h 39cf6874dc239d6b4e30479b1975fe5b22a3caaf
|
F ext/fts3/fts3_hash.h 39cf6874dc239d6b4e30479b1975fe5b22a3caaf
|
||||||
F ext/fts3/fts3_icu.c e319e108661147bcca8dd511cd562f33a1ba81b5
|
F ext/fts3/fts3_icu.c e319e108661147bcca8dd511cd562f33a1ba81b5
|
||||||
F ext/fts3/fts3_porter.c a465b49fcb8249a755792f87516eff182efa42b3
|
F ext/fts3/fts3_porter.c 7f8b4bf5af7c0f20f73b8e87e14fa9298f52e290
|
||||||
F ext/fts3/fts3_snippet.c 51beb5c1498176fd9caccaf1c75b55cb803a985a
|
F ext/fts3/fts3_snippet.c 51beb5c1498176fd9caccaf1c75b55cb803a985a
|
||||||
F ext/fts3/fts3_term.c a521f75132f9a495bdca1bdd45949b3191c52763
|
F ext/fts3/fts3_term.c a521f75132f9a495bdca1bdd45949b3191c52763
|
||||||
F ext/fts3/fts3_test.c 8a3a78c4458b2d7c631fcf4b152a5cd656fa7038
|
F ext/fts3/fts3_test.c 8a3a78c4458b2d7c631fcf4b152a5cd656fa7038
|
||||||
@@ -156,7 +156,7 @@ F ext/session/test_session.c d38968307c05229cc8cd603722cf305d6f768832
|
|||||||
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
|
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
|
||||||
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
|
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
|
||||||
F magic.txt f439556c5ce01ced70987e5ee86549a45165d9ff
|
F magic.txt f439556c5ce01ced70987e5ee86549a45165d9ff
|
||||||
F main.mk 3cbbebc94dfb328e26647e13be242ded25b7e17f
|
F main.mk a3028a846754a96c8841d1a7227890c471c65ec2
|
||||||
F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a
|
F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a
|
||||||
F mkextu.sh 416f9b7089d80e5590a29692c9d9280a10dbad9f
|
F mkextu.sh 416f9b7089d80e5590a29692c9d9280a10dbad9f
|
||||||
F mkextw.sh d2a981497b404d6498f5ff3e3b1f3816bdfcb338
|
F mkextw.sh d2a981497b404d6498f5ff3e3b1f3816bdfcb338
|
||||||
@@ -175,7 +175,7 @@ F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
|
|||||||
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
|
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
|
||||||
F src/alter.c 2af0330bb1b601af7a7789bf7229675fd772a083
|
F src/alter.c 2af0330bb1b601af7a7789bf7229675fd772a083
|
||||||
F src/analyze.c 581d5c18ce89c6f45d4dca65914d0de5b4dad41f
|
F src/analyze.c 581d5c18ce89c6f45d4dca65914d0de5b4dad41f
|
||||||
F src/attach.c 0a17c9364895316ca4f52d06a97a72c0af1ae8b3
|
F src/attach.c 3801129015ef59d76bf23c95ef9b0069d18a0c52
|
||||||
F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
|
F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
|
||||||
F src/backup.c a729e63cf5cd1829507cb7b8e89f99b95141bb53
|
F src/backup.c a729e63cf5cd1829507cb7b8e89f99b95141bb53
|
||||||
F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
|
F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
|
||||||
@@ -188,21 +188,21 @@ F src/callback.c 174e3c8656bc29f91d710ab61550d16eea34be98
|
|||||||
F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
|
F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
|
||||||
F src/ctime.c 77779efbe78dd678d84bfb4fc2e87b6b6ad8dccd
|
F src/ctime.c 77779efbe78dd678d84bfb4fc2e87b6b6ad8dccd
|
||||||
F src/date.c 593c744b2623971e45affd0bde347631bdfa4625
|
F src/date.c 593c744b2623971e45affd0bde347631bdfa4625
|
||||||
F src/delete.c 65c34400e401c482501dac5cd14a12621260f6d0
|
F src/delete.c e9806af75b7f4015f6410ad87a2a12c353339499
|
||||||
F src/expr.c 31a2b65339f6c3795d4cfa5e99798cd72f9fdfdf
|
F src/expr.c ffe4bc79c66f711f450a6113fbd1943b9b2380f7
|
||||||
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
||||||
F src/fkey.c 2ab0f5384b70594468ef3ac5c7ed8ca24bfd17d5
|
F src/fkey.c 2ab0f5384b70594468ef3ac5c7ed8ca24bfd17d5
|
||||||
F src/func.c fed87f35cf4da4a798b726d84abefc209b48d831
|
F src/func.c 6325ac2ec10833ccf4d5c36d323709221d37ea19
|
||||||
F src/global.c 1d7bb7ea8254ae6a68ed9bfaf65fcb3d1690b486
|
F src/global.c 1d7bb7ea8254ae6a68ed9bfaf65fcb3d1690b486
|
||||||
F src/hash.c ac3470bbf1ca4ae4e306a8ecb0fdf1731810ffe4
|
F src/hash.c ac3470bbf1ca4ae4e306a8ecb0fdf1731810ffe4
|
||||||
F src/hash.h 8890a25af81fb85a9ad7790d32eedab4b994da22
|
F src/hash.h 8890a25af81fb85a9ad7790d32eedab4b994da22
|
||||||
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
|
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
|
||||||
F src/insert.c db64e62555482dcdc3903b0f01d910094ac0dcb2
|
F src/insert.c de6cd4bb09a38560d2dd8ae96ec8b4a7ac6d6d70
|
||||||
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
|
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
|
||||||
F src/legacy.c 0df0b1550b9cc1f58229644735e317ac89131f12
|
F src/legacy.c 0df0b1550b9cc1f58229644735e317ac89131f12
|
||||||
F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b
|
F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b
|
||||||
F src/loadext.c 867c7b330b740c6c917af9956b13b81d0a048303
|
F src/loadext.c 867c7b330b740c6c917af9956b13b81d0a048303
|
||||||
F src/main.c 292a67f4f803068ce5d160cfe76c052d8713e045
|
F src/main.c 2c674289707ebd814b33b8594c930d60861013b9
|
||||||
F src/malloc.c 0203ebce9152c6a0e5de520140b8ba65187350be
|
F src/malloc.c 0203ebce9152c6a0e5de520140b8ba65187350be
|
||||||
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
||||||
F src/mem1.c c0c990fcaddff810ea277b4fb5d9138603dd5d4b
|
F src/mem1.c c0c990fcaddff810ea277b4fb5d9138603dd5d4b
|
||||||
@@ -216,7 +216,7 @@ F src/mutex_noop.c 7682796b7d8d39bf1c138248858efcd10c9e1553
|
|||||||
F src/mutex_unix.c c3a4e00f96ba068a8dbef34084465979aaf369cc
|
F src/mutex_unix.c c3a4e00f96ba068a8dbef34084465979aaf369cc
|
||||||
F src/mutex_w32.c 6108c88e1cb38d8fbb3534b170793815cbedbf97
|
F src/mutex_w32.c 6108c88e1cb38d8fbb3534b170793815cbedbf97
|
||||||
F src/notify.c 976dd0f6171d4588e89e874fcc765e92914b6d30
|
F src/notify.c 976dd0f6171d4588e89e874fcc765e92914b6d30
|
||||||
F src/os.c b4ad71336fd96f97776f75587cd9e8218288f5be
|
F src/os.c 1b147e4cf7cc39e618115c14a086aed44bc91ace
|
||||||
F src/os.h 4a46270a64e9193af4a0aaa3bc2c66dc07c29b3f
|
F src/os.h 4a46270a64e9193af4a0aaa3bc2c66dc07c29b3f
|
||||||
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
|
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
|
||||||
F src/os_unix.c 60a7b3b23e6fcf83a50d1e320b280b551724e11f
|
F src/os_unix.c 60a7b3b23e6fcf83a50d1e320b280b551724e11f
|
||||||
@@ -228,21 +228,21 @@ F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
|
|||||||
F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
|
F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
|
||||||
F src/pcache1.c 57fee9a9a617218f5037afbbe49b09da65bde56b
|
F src/pcache1.c 57fee9a9a617218f5037afbbe49b09da65bde56b
|
||||||
F src/pragma.c 5ab7279d132143feb77f773688a24ab05da75fd7
|
F src/pragma.c 5ab7279d132143feb77f773688a24ab05da75fd7
|
||||||
F src/prepare.c 359d1a1e9c9bd4488e4dd3a1aaaf2d2ebb9bb768
|
F src/prepare.c 677521ab7132615a8a26107a1d1c3132f44ae337
|
||||||
F src/printf.c ba8b28e9d4ce984430e9f33f6ef1c85a1826d1dd
|
F src/printf.c 85d07756e45d7496d19439dcae3e6e9e0090f269
|
||||||
F src/random.c 0b2dbc37fdfbfa6bd455b091dfcef5bdb32dba68
|
F src/random.c 0b2dbc37fdfbfa6bd455b091dfcef5bdb32dba68
|
||||||
F src/resolve.c 7eda9097b29fcf3d2b42fdc17d1de672134e09b6
|
F src/resolve.c 7eda9097b29fcf3d2b42fdc17d1de672134e09b6
|
||||||
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
|
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
|
||||||
F src/select.c d41381d80a22d3a83352aeca274cccf264ac277a
|
F src/select.c 819bb090c9a348d17f69f136cad2bfa9ee9cbb41
|
||||||
F src/shell.c 18924f6ccfa70da98bf9e388bab512c0fd1e792e
|
F src/shell.c a3541193d5fce37e91dad8ef46a9505aa7c9b344
|
||||||
F src/sqlite.h.in 9ccaa04411778b0b3a95df6a9fc9c396b779f0cb
|
F src/sqlite.h.in 9ccaa04411778b0b3a95df6a9fc9c396b779f0cb
|
||||||
F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
|
F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
|
||||||
F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc
|
F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc
|
||||||
F src/sqliteInt.h 8c7d6a7f3474c3b487311baeb03ba72120e35716
|
F src/sqliteInt.h edf19afa8c416413008d9b402f2991e2fb0b3e51
|
||||||
F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
|
F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
|
||||||
F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158
|
F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158
|
||||||
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
||||||
F src/tclsqlite.c 758fa6b6cfd39330db8b71b1f94e46f03ef375b8
|
F src/tclsqlite.c fa8d54ebdb7d91e0f6e7472ee5d8b7b543e65adb
|
||||||
F src/test1.c 633e5e6a116acf4473b9289240bcceb5320a9d93
|
F src/test1.c 633e5e6a116acf4473b9289240bcceb5320a9d93
|
||||||
F src/test2.c 7355101c085304b90024f2261e056cdff13c6c35
|
F src/test2.c 7355101c085304b90024f2261e056cdff13c6c35
|
||||||
F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c
|
F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c
|
||||||
@@ -290,24 +290,24 @@ F src/test_vfstrace.c 3a0ab304682fecbceb689e7d9b904211fde11d78
|
|||||||
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
|
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
|
||||||
F src/tokenize.c ec4c1a62b890bf1dbcdb966399e140b904c700a4
|
F src/tokenize.c ec4c1a62b890bf1dbcdb966399e140b904c700a4
|
||||||
F src/trigger.c d84e1f3669e9a217731a14a9d472b1c7b87c87ba
|
F src/trigger.c d84e1f3669e9a217731a14a9d472b1c7b87c87ba
|
||||||
F src/update.c 4ada523da2d315996296456a8e384f11983a9aa0
|
F src/update.c 3143bbdfc8c2d78b74dba15133df04843221ce0d
|
||||||
F src/utf.c 6fc6c88d50448c469c5c196acf21617a24f90269
|
F src/utf.c 6fc6c88d50448c469c5c196acf21617a24f90269
|
||||||
F src/util.c e71f19b272f05c8695cf747b4bac1732685f9e5c
|
F src/util.c e71f19b272f05c8695cf747b4bac1732685f9e5c
|
||||||
F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
|
F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
|
||||||
F src/vdbe.c d8df062f9b24a5cb83348ca2c14ff211a321a092
|
F src/vdbe.c ad89fac32d84b5b40778a20a707206630e9cf655
|
||||||
F src/vdbe.h b7bfa7b468fcad2cf1890969fe7459325da00385
|
F src/vdbe.h 4c15d2c90b52fce24e1bd5eaa783f7451849e95b
|
||||||
F src/vdbeInt.h 062d6e86551ffad25056f3e154fbe5a02e4d8cce
|
F src/vdbeInt.h 08d79db15519f98d6d2c2dedaebfbb7f3d69a6d8
|
||||||
F src/vdbeapi.c 647d65813a5595c7f667b9f43d119ecd8d70be08
|
F src/vdbeapi.c 647d65813a5595c7f667b9f43d119ecd8d70be08
|
||||||
F src/vdbeaux.c 0ee1dc808fe245bc85988c12478582d666351330
|
F src/vdbeaux.c 4dc5258ac337fd6600d1efb144b34316d2bbe05a
|
||||||
F src/vdbeblob.c a2809461743e0b9dd9be871149ac65e8d2c80c08
|
F src/vdbeblob.c 6e791541114d482074e031ef8dbc3d5e5c180e23
|
||||||
F src/vdbemem.c 0e69351b2c6ff7d8b638688c0ae336a26befa6b2
|
F src/vdbemem.c 0e69351b2c6ff7d8b638688c0ae336a26befa6b2
|
||||||
F src/vdbesort.c 9d83601f9d6243fe70dd0169a2820c5ddfd48147
|
F src/vdbesort.c 9d83601f9d6243fe70dd0169a2820c5ddfd48147
|
||||||
F src/vdbetrace.c f7eb148eb3b4fa3401b20024630dcb43d322e73c
|
F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767
|
||||||
F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd
|
F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd
|
||||||
F src/wal.c 7dc3966ef98b74422267e7e6e46e07ff6c6eb1b4
|
F src/wal.c 7dc3966ef98b74422267e7e6e46e07ff6c6eb1b4
|
||||||
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
|
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
|
||||||
F src/walker.c e9e593d5bb798c3e67fc3893dfe7055c9e7d8d74
|
F src/walker.c e9e593d5bb798c3e67fc3893dfe7055c9e7d8d74
|
||||||
F src/where.c b8f3aab1e5843012895b89a183dcdd6cef0708db
|
F src/where.c 60bc8c5b00e2292c24a42455d022eeeda33a16f1
|
||||||
F src/whereInt.h 96a75c61f1d2b9d4a8e4bb17d89deb0cf7cba358
|
F src/whereInt.h 96a75c61f1d2b9d4a8e4bb17d89deb0cf7cba358
|
||||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||||
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
||||||
@@ -338,7 +338,7 @@ F test/async5.test 383ab533fdb9f7ad228cc99ee66e1acb34cc0dc0
|
|||||||
F test/atof1.test 08a61df9365c341f334a65f4348897312d8f3db7
|
F test/atof1.test 08a61df9365c341f334a65f4348897312d8f3db7
|
||||||
F test/attach.test 0d112b7713611fdf0340260192749737135fda5f
|
F test/attach.test 0d112b7713611fdf0340260192749737135fda5f
|
||||||
F test/attach2.test 0ec5defa340363de6cd50fd595046465e9aaba2d
|
F test/attach2.test 0ec5defa340363de6cd50fd595046465e9aaba2d
|
||||||
F test/attach3.test d89ccfe4fe6e2b5e368d480fcdfe4b496c54cf4e
|
F test/attach3.test 359eb65d00102cdfcef6fa4e81dc1648f8f80b27
|
||||||
F test/attach4.test 53bf502f17647c6d6c5add46dda6bac8b6f4665c
|
F test/attach4.test 53bf502f17647c6d6c5add46dda6bac8b6f4665c
|
||||||
F test/attachmalloc.test 3a4bfca9545bfe906a8d2e622de10fbac5b711b0
|
F test/attachmalloc.test 3a4bfca9545bfe906a8d2e622de10fbac5b711b0
|
||||||
F test/auth.test 9bea29041871807d9f289ee679d05d3ed103642f
|
F test/auth.test 9bea29041871807d9f289ee679d05d3ed103642f
|
||||||
@@ -378,7 +378,7 @@ F test/btreefault.test c2bcb542685eea44621275cfedbd8a13f65201e3
|
|||||||
F test/busy.test 76b4887f8b9160ba903c1ac22e8ff406ad6ae2f0
|
F test/busy.test 76b4887f8b9160ba903c1ac22e8ff406ad6ae2f0
|
||||||
F test/cache.test 13bc046b26210471ca6f2889aceb1ea52dc717de
|
F test/cache.test 13bc046b26210471ca6f2889aceb1ea52dc717de
|
||||||
F test/capi2.test 011c16da245fdc0106a2785035de6b242c05e738
|
F test/capi2.test 011c16da245fdc0106a2785035de6b242c05e738
|
||||||
F test/capi3.test f5eab498a0927d498e6d75c14567addb995ceccb
|
F test/capi3.test 56ab450125ead38846cbae7e5b6a216686c3cffa
|
||||||
F test/capi3b.test efb2b9cfd127efa84433cd7a2d72ce0454ae0dc4
|
F test/capi3b.test efb2b9cfd127efa84433cd7a2d72ce0454ae0dc4
|
||||||
F test/capi3c.test 93d24621c9ff84da9da060f30431e0453db1cdb0
|
F test/capi3c.test 93d24621c9ff84da9da060f30431e0453db1cdb0
|
||||||
F test/capi3d.test 6d0fc0a86d73f42dd19a7d8b7761ab9bc02277d0
|
F test/capi3d.test 6d0fc0a86d73f42dd19a7d8b7761ab9bc02277d0
|
||||||
@@ -388,7 +388,7 @@ F test/check.test 5831ddb6f2c687782eaf2e1a07b6e17f24c4f763
|
|||||||
F test/close.test 340bd24cc58b16c6bc01967402755027c37eb815
|
F test/close.test 340bd24cc58b16c6bc01967402755027c37eb815
|
||||||
F test/closure01.test dbb28f1ea9eeaf0a53ec5bc0fed352e479def8c7
|
F test/closure01.test dbb28f1ea9eeaf0a53ec5bc0fed352e479def8c7
|
||||||
F test/coalesce.test cee0dccb9fbd2d494b77234bccf9dc6c6786eb91
|
F test/coalesce.test cee0dccb9fbd2d494b77234bccf9dc6c6786eb91
|
||||||
F test/collate1.test b709989e6e6ff6e1d2bd64231c2c1d8146846c9e
|
F test/collate1.test 73b91005f264b7c403e2d63a6708d150679ac99a
|
||||||
F test/collate2.test 9aaa410a00734e48bcb27f3872617d6f69b2a621
|
F test/collate2.test 9aaa410a00734e48bcb27f3872617d6f69b2a621
|
||||||
F test/collate3.test 79558a286362cb9ed603c6fa543f1cda7f563f0f
|
F test/collate3.test 79558a286362cb9ed603c6fa543f1cda7f563f0f
|
||||||
F test/collate4.test f04d5168685f2eef637ecfa2d4ddf8ec0d600177
|
F test/collate4.test f04d5168685f2eef637ecfa2d4ddf8ec0d600177
|
||||||
@@ -470,7 +470,7 @@ F test/eqp.test 57c6c604c2807fb5531731c5323133453c24afac
|
|||||||
F test/errmsg.test f31592a594b44ee121371d25ddd5d63497bb3401
|
F test/errmsg.test f31592a594b44ee121371d25ddd5d63497bb3401
|
||||||
F test/eval.test bc269c365ba877554948441e91ad5373f9f91be3
|
F test/eval.test bc269c365ba877554948441e91ad5373f9f91be3
|
||||||
F test/exclusive.test c7ebbc756eacf544c108b15eed64d7d4e5f86b75
|
F test/exclusive.test c7ebbc756eacf544c108b15eed64d7d4e5f86b75
|
||||||
F test/exclusive2.test 881193eccec225cfed9d7f744b65e57f26adee25
|
F test/exclusive2.test 32798111aae78a5deec980eee383213f189df308
|
||||||
F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7
|
F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7
|
||||||
F test/exists.test 8f7b27b61c2fbe5822f0a1f899c715d14e416e30
|
F test/exists.test 8f7b27b61c2fbe5822f0a1f899c715d14e416e30
|
||||||
F test/expr.test 67c9fd6f8f829e239dc8b0f4a08a73c08b09196d
|
F test/expr.test 67c9fd6f8f829e239dc8b0f4a08a73c08b09196d
|
||||||
@@ -523,13 +523,13 @@ F test/fts2r.test b154c30b63061d8725e320fba1a39e2201cadd5e
|
|||||||
F test/fts2token.test d8070b241a15ff13592a9ae4a8b7c171af6f445a
|
F test/fts2token.test d8070b241a15ff13592a9ae4a8b7c171af6f445a
|
||||||
F test/fts3.test 672a040ea57036fb4b6fdc09027c18d7d24ab654
|
F test/fts3.test 672a040ea57036fb4b6fdc09027c18d7d24ab654
|
||||||
F test/fts3_common.tcl 99cf6659b87c0f74f55963c2aea03b3a7d66ceb0
|
F test/fts3_common.tcl 99cf6659b87c0f74f55963c2aea03b3a7d66ceb0
|
||||||
F test/fts3aa.test ad272d695095a55c16a5091dbdcce7c5f55da605
|
F test/fts3aa.test edd20ddbbc5b6015ab340abf2ca278ae11ec387d
|
||||||
F test/fts3ab.test 09aeaa162aee6513d9ff336b6932211008b9d1f9
|
F test/fts3ab.test 7f6cf260ae80dda064023df8e8e503e9a412b91f
|
||||||
F test/fts3ac.test 636ed7486043055d4f126a0e385f2d5a82ebbf63
|
F test/fts3ac.test 636ed7486043055d4f126a0e385f2d5a82ebbf63
|
||||||
F test/fts3ad.test e40570cb6f74f059129ad48bcef3d7cbc20dda49
|
F test/fts3ad.test e40570cb6f74f059129ad48bcef3d7cbc20dda49
|
||||||
F test/fts3ae.test ce32a13b34b0260928e4213b4481acf801533bda
|
F test/fts3ae.test ce32a13b34b0260928e4213b4481acf801533bda
|
||||||
F test/fts3af.test d394978c534eabf22dd0837e718b913fd66b499c
|
F test/fts3af.test d394978c534eabf22dd0837e718b913fd66b499c
|
||||||
F test/fts3ag.test 0b7d303f61ae5d620c4efb5e825713ea34ff9441
|
F test/fts3ag.test c003672a215124df7fc6000036d896f498b26b53
|
||||||
F test/fts3ah.test dc9f66c32c296f1bc8bcc4535126bddfeca62894
|
F test/fts3ah.test dc9f66c32c296f1bc8bcc4535126bddfeca62894
|
||||||
F test/fts3ai.test 24058fdc6e9e5102c1fd8459591b114b6a85d285
|
F test/fts3ai.test 24058fdc6e9e5102c1fd8459591b114b6a85d285
|
||||||
F test/fts3aj.test 0ed71e1dd9b03b843a857dc3eb9b15630e0104fc
|
F test/fts3aj.test 0ed71e1dd9b03b843a857dc3eb9b15630e0104fc
|
||||||
@@ -549,7 +549,7 @@ F test/fts3conf.test ee8500c86dd58ec075e8831a1e216a79989436de
|
|||||||
F test/fts3corrupt.test 2710b77983cc7789295ddbffea52c1d3b7506dbb
|
F test/fts3corrupt.test 2710b77983cc7789295ddbffea52c1d3b7506dbb
|
||||||
F test/fts3corrupt2.test 6d96efae2f8a6af3eeaf283aba437e6d0e5447ba
|
F test/fts3corrupt2.test 6d96efae2f8a6af3eeaf283aba437e6d0e5447ba
|
||||||
F test/fts3cov.test e0fb00d8b715ddae4a94c305992dfc3ef70353d7
|
F test/fts3cov.test e0fb00d8b715ddae4a94c305992dfc3ef70353d7
|
||||||
F test/fts3d.test bf640d79722b720fa1c81834c48cdaa45d531b1a
|
F test/fts3d.test c8a193513a269ec4c205ca09645e26e0bc71b860
|
||||||
F test/fts3defer.test 0be4440b73a2e651fc1e472066686d6ada4b9963
|
F test/fts3defer.test 0be4440b73a2e651fc1e472066686d6ada4b9963
|
||||||
F test/fts3defer2.test a3b6cbeabaf28c9398652a4d101ea224d9358479
|
F test/fts3defer2.test a3b6cbeabaf28c9398652a4d101ea224d9358479
|
||||||
F test/fts3defer3.test dd53fc13223c6d8264a98244e9b19abd35ed71cd
|
F test/fts3defer3.test dd53fc13223c6d8264a98244e9b19abd35ed71cd
|
||||||
@@ -563,7 +563,7 @@ F test/fts3fault2.test 3198eef2804deea7cac8403e771d9cbcb752d887
|
|||||||
F test/fts3first.test dbdedd20914c8d539aa3206c9b34a23775644641
|
F test/fts3first.test dbdedd20914c8d539aa3206c9b34a23775644641
|
||||||
F test/fts3malloc.test b0e4c133b8d61d4f6d112d8110f8320e9e453ef6
|
F test/fts3malloc.test b0e4c133b8d61d4f6d112d8110f8320e9e453ef6
|
||||||
F test/fts3matchinfo.test ff423e73faab8fc6d7adeefedf74dd8e2b0b14e0
|
F test/fts3matchinfo.test ff423e73faab8fc6d7adeefedf74dd8e2b0b14e0
|
||||||
F test/fts3near.test 12895557870b0f9af7cc0be81a0171abb2d12f12
|
F test/fts3near.test 7e3354d46f155a822b59c0e957fd2a70c1d7e905
|
||||||
F test/fts3prefix.test b36d4f00b128a51e7b386cc013a874246d9d7dc1
|
F test/fts3prefix.test b36d4f00b128a51e7b386cc013a874246d9d7dc1
|
||||||
F test/fts3prefix2.test e1f0a822ca661dced7f12ce392e14eaf65609dce
|
F test/fts3prefix2.test e1f0a822ca661dced7f12ce392e14eaf65609dce
|
||||||
F test/fts3query.test 4fefd43ff24993bc2c9b2778f2bec0cc7629e7ed
|
F test/fts3query.test 4fefd43ff24993bc2c9b2778f2bec0cc7629e7ed
|
||||||
@@ -571,7 +571,7 @@ F test/fts3rnd.test 1320d8826a845e38a96e769562bf83d7a92a15d0
|
|||||||
F test/fts3shared.test 57e26a801f21027b7530da77db54286a6fe4997e
|
F test/fts3shared.test 57e26a801f21027b7530da77db54286a6fe4997e
|
||||||
F test/fts3snippet.test d524af6bcef4714e059ef559113dbdc924cd33d1
|
F test/fts3snippet.test d524af6bcef4714e059ef559113dbdc924cd33d1
|
||||||
F test/fts3sort.test ed34c716a11cc2009a35210e84ad5f9c102362ca
|
F test/fts3sort.test ed34c716a11cc2009a35210e84ad5f9c102362ca
|
||||||
F test/fts3tok1.test b10d0a12a0ab5f905cea1200b745de233f37443f
|
F test/fts3tok1.test c551043de056b0b1582a54e878991f57bad074bc
|
||||||
F test/fts3tok_err.test 52273cd193b9036282f7bacb43da78c6be87418d
|
F test/fts3tok_err.test 52273cd193b9036282f7bacb43da78c6be87418d
|
||||||
F test/fts3varint.test 752c08ed5d32c5d7dc211b056f4ed68a76b7e36e
|
F test/fts3varint.test 752c08ed5d32c5d7dc211b056f4ed68a76b7e36e
|
||||||
F test/fts4aa.test 0c3152322c7f0b548cc942ad763eaba0da87ccca
|
F test/fts4aa.test 0c3152322c7f0b548cc942ad763eaba0da87ccca
|
||||||
@@ -585,7 +585,7 @@ F test/fts4merge2.test 5faa558d1b672f82b847d2a337465fa745e46891
|
|||||||
F test/fts4merge3.test aab02a09f50fe6baaddc2e159c3eabc116d45fc7
|
F test/fts4merge3.test aab02a09f50fe6baaddc2e159c3eabc116d45fc7
|
||||||
F test/fts4merge4.test c19c85ca1faa7b6d536832b49c12e1867235f584
|
F test/fts4merge4.test c19c85ca1faa7b6d536832b49c12e1867235f584
|
||||||
F test/fts4noti.test aed33ba44808852dcb24bf70fa132e7bf530f057
|
F test/fts4noti.test aed33ba44808852dcb24bf70fa132e7bf530f057
|
||||||
F test/fts4unicode.test e28ba1a14181e709dcdf47455f207adf14c7cfe0
|
F test/fts4unicode.test 01ec3fe2a7c3cfff3b4c0581b83caa11b33efa36
|
||||||
F test/full.test 6b3c8fb43c6beab6b95438c1675374b95fab245d
|
F test/full.test 6b3c8fb43c6beab6b95438c1675374b95fab245d
|
||||||
F test/func.test 00667bbeac044d007f6f021af1b9f6150f0c7ff8
|
F test/func.test 00667bbeac044d007f6f021af1b9f6150f0c7ff8
|
||||||
F test/func2.test 772d66227e4e6684b86053302e2d74a2500e1e0f
|
F test/func2.test 772d66227e4e6684b86053302e2d74a2500e1e0f
|
||||||
@@ -717,7 +717,7 @@ F test/misuse.test ba4fb5d1a6101d1c171ea38b3c613d0661c83054
|
|||||||
F test/mmap1.test 93d167b328255cbe6679fe1e1a23be1b1197d07b
|
F test/mmap1.test 93d167b328255cbe6679fe1e1a23be1b1197d07b
|
||||||
F test/mmap2.test 9d6dd9ddb4ad2379f29cc78f38ce1e63ed418022
|
F test/mmap2.test 9d6dd9ddb4ad2379f29cc78f38ce1e63ed418022
|
||||||
F test/mmap3.test c92273e16eb8d23c1d55c9815b446bb72ef0512e
|
F test/mmap3.test c92273e16eb8d23c1d55c9815b446bb72ef0512e
|
||||||
F test/mmapfault.test 97507ee06172df99057dbf1c40294eabd82cbb13
|
F test/mmapfault.test d4c9eff9cd8c2dc14bc43e71e042f175b0a26fe3
|
||||||
F test/multiplex.test e08cc7177bd6d85990ee1d71100bb6c684c02256
|
F test/multiplex.test e08cc7177bd6d85990ee1d71100bb6c684c02256
|
||||||
F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a
|
F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a
|
||||||
F test/multiplex3.test d228f59eac91839a977eac19f21d053f03e4d101
|
F test/multiplex3.test d228f59eac91839a977eac19f21d053f03e4d101
|
||||||
@@ -753,6 +753,7 @@ F test/permutations.test 79927c8175c4dc889f30486388490dae229b3b11
|
|||||||
F test/pragma.test e882183ecd21d064cec5c7aaea174fbd36293429
|
F test/pragma.test e882183ecd21d064cec5c7aaea174fbd36293429
|
||||||
F test/pragma2.test aea7b3d82c76034a2df2b38a13745172ddc0bc13
|
F test/pragma2.test aea7b3d82c76034a2df2b38a13745172ddc0bc13
|
||||||
F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552
|
F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552
|
||||||
|
F test/printf2.test 414fcba6d6c10e0a5e58efd213811e5ead4635a0
|
||||||
F test/progress.test a282973d1d17f08071bc58a77d6b80f2a81c354d
|
F test/progress.test a282973d1d17f08071bc58a77d6b80f2a81c354d
|
||||||
F test/ptrchng.test ef1aa72d6cf35a2bbd0869a649b744e9d84977fc
|
F test/ptrchng.test ef1aa72d6cf35a2bbd0869a649b744e9d84977fc
|
||||||
F test/queryonly.test 5f653159e0f552f0552d43259890c1089391dcca
|
F test/queryonly.test 5f653159e0f552f0552d43259890c1089391dcca
|
||||||
@@ -786,7 +787,7 @@ F test/schema2.test 906408621ea881fdb496d878b1822572a34e32c5
|
|||||||
F test/schema3.test 1bc1008e1f8cb5654b248c55f27249366eb7ed38
|
F test/schema3.test 1bc1008e1f8cb5654b248c55f27249366eb7ed38
|
||||||
F test/schema4.test e6a66e20cc69f0e306667c08be7fda3d11707dc5
|
F test/schema4.test e6a66e20cc69f0e306667c08be7fda3d11707dc5
|
||||||
F test/schema5.test 29699b4421f183c8f0e88bd28ce7d75d13ea653e
|
F test/schema5.test 29699b4421f183c8f0e88bd28ce7d75d13ea653e
|
||||||
F test/securedel.test 87a2561151af1f1e349071a89fdd77059f50113c
|
F test/securedel.test 21749c32ccc30f1ea9e4b9f33295a6521ec20fa0
|
||||||
F test/securedel2.test 2d54c28e46eb1fd6902089958b20b1b056c6f1c5
|
F test/securedel2.test 2d54c28e46eb1fd6902089958b20b1b056c6f1c5
|
||||||
F test/select1.test fc2a61f226a649393664ad54bc5376631801517c
|
F test/select1.test fc2a61f226a649393664ad54bc5376631801517c
|
||||||
F test/select2.test 352480e0e9c66eda9c3044e412abdf5be0215b56
|
F test/select2.test 352480e0e9c66eda9c3044e412abdf5be0215b56
|
||||||
@@ -816,14 +817,14 @@ F test/sharedA.test 0cdf1a76dfa00e6beee66af5b534b1e8df2720f5
|
|||||||
F test/shared_err.test 0079c05c97d88cfa03989b7c20a8b266983087aa
|
F test/shared_err.test 0079c05c97d88cfa03989b7c20a8b266983087aa
|
||||||
F test/sharedlock.test 5ede3c37439067c43b0198f580fd374ebf15d304
|
F test/sharedlock.test 5ede3c37439067c43b0198f580fd374ebf15d304
|
||||||
F test/shell1.test e7c0b9ebda25d5e78f0a3ea0dc4e31bb6d8098c0
|
F test/shell1.test e7c0b9ebda25d5e78f0a3ea0dc4e31bb6d8098c0
|
||||||
F test/shell2.test e1d3790f064e50b2f973502f45750012667486df
|
F test/shell2.test c57da3a381c099b02c813ba156298d5c2f5c93a3
|
||||||
F test/shell3.test 5e8545ec72c4413a0e8d4c6be56496e3c257ca29
|
F test/shell3.test 5e8545ec72c4413a0e8d4c6be56496e3c257ca29
|
||||||
F test/shell4.test aa4eef8118b412d1a01477a53426ece169ea86a9
|
F test/shell4.test aa4eef8118b412d1a01477a53426ece169ea86a9
|
||||||
F test/shell5.test cee83b4385f842fec1f2a0bec9ea811f35386edf
|
F test/shell5.test cee83b4385f842fec1f2a0bec9ea811f35386edf
|
||||||
F test/shortread1.test bb591ef20f0fd9ed26d0d12e80eee6d7ac8897a3
|
F test/shortread1.test bb591ef20f0fd9ed26d0d12e80eee6d7ac8897a3
|
||||||
F test/shrink.test 8c70f62b6e8eb4d54533de6d65bd06b1b9a17868
|
F test/shrink.test 8c70f62b6e8eb4d54533de6d65bd06b1b9a17868
|
||||||
F test/sidedelete.test f0ad71abe6233e3b153100f3b8d679b19a488329
|
F test/sidedelete.test f0ad71abe6233e3b153100f3b8d679b19a488329
|
||||||
F test/skipscan1.test 6bb4891c2cc5efd5690a9da9e7508e53d4a68e10
|
F test/skipscan1.test 8c777ffd9dad6ee6d2568160cb2158f0b5cd9dd2
|
||||||
F test/skipscan2.test 5a4db0799c338ddbacb154aaa5589c0254b36a8d
|
F test/skipscan2.test 5a4db0799c338ddbacb154aaa5589c0254b36a8d
|
||||||
F test/soak.test 0b5b6375c9f4110c828070b826b3b4b0bb65cd5f
|
F test/soak.test 0b5b6375c9f4110c828070b826b3b4b0bb65cd5f
|
||||||
F test/softheap1.test 40562fe6cac6d9827b7b42b86d45aedf12c15e24
|
F test/softheap1.test 40562fe6cac6d9827b7b42b86d45aedf12c15e24
|
||||||
@@ -836,10 +837,10 @@ F test/speed3.test d32043614c08c53eafdc80f33191d5bd9b920523
|
|||||||
F test/speed4.test abc0ad3399dcf9703abed2fff8705e4f8e416715
|
F test/speed4.test abc0ad3399dcf9703abed2fff8705e4f8e416715
|
||||||
F test/speed4p.explain 6b5f104ebeb34a038b2f714150f51d01143e59aa
|
F test/speed4p.explain 6b5f104ebeb34a038b2f714150f51d01143e59aa
|
||||||
F test/speed4p.test 0e51908951677de5a969b723e03a27a1c45db38b
|
F test/speed4p.test 0e51908951677de5a969b723e03a27a1c45db38b
|
||||||
F test/speedtest1.c bb3a4cc62b6cf29f5bc72c85d2bee5991e207be7
|
F test/speedtest1.c 7130d2cb6db45baa553a4ab2f715116c71c2d9f4
|
||||||
F test/spellfix.test 8c40b169b104086d8795781f670ba3c786d6d8be
|
F test/spellfix.test 8c40b169b104086d8795781f670ba3c786d6d8be
|
||||||
F test/sqllimits1.test b1aae27cc98eceb845e7f7adf918561256e31298
|
F test/sqllimits1.test b1aae27cc98eceb845e7f7adf918561256e31298
|
||||||
F test/stat.test c8eccfe8fcd3f3cfc864ce22d5b9e803a3c69940
|
F test/stat.test 76fd746b85459e812a0193410fb599f0531f22de
|
||||||
F test/stmt.test 25d64e3dbf9a3ce89558667d7f39d966fe2a71b9
|
F test/stmt.test 25d64e3dbf9a3ce89558667d7f39d966fe2a71b9
|
||||||
F test/subquery.test 666fdecceac258f5fd84bed09a64e49d9f37edd9
|
F test/subquery.test 666fdecceac258f5fd84bed09a64e49d9f37edd9
|
||||||
F test/subquery2.test 91e1e364072aeff431d1f9689b15147e421d88c7
|
F test/subquery2.test 91e1e364072aeff431d1f9689b15147e421d88c7
|
||||||
@@ -896,7 +897,7 @@ F test/tkt-80e031a00f.test 9a154173461a4dbe2de49cda73963e04842d52f7
|
|||||||
F test/tkt-8454a207b9.test c583a9f814a82a2b5ba95207f55001c9f0cd816c
|
F test/tkt-8454a207b9.test c583a9f814a82a2b5ba95207f55001c9f0cd816c
|
||||||
F test/tkt-868145d012.test a5f941107ece6a64410ca4755c6329b7eb57a356
|
F test/tkt-868145d012.test a5f941107ece6a64410ca4755c6329b7eb57a356
|
||||||
F test/tkt-91e2e8ba6f.test 08c4f94ae07696b05c9b822da0b4e5337a2f54c5
|
F test/tkt-91e2e8ba6f.test 08c4f94ae07696b05c9b822da0b4e5337a2f54c5
|
||||||
F test/tkt-94c04eaadb.test fa9c71192f7e2ea2d51bf078bc34e8da6088bf71
|
F test/tkt-94c04eaadb.test f738c57c7f68ab8be1c054415af7774617cb6223
|
||||||
F test/tkt-9d68c883.test 458f7d82a523d7644b54b497c986378a7d8c8b67
|
F test/tkt-9d68c883.test 458f7d82a523d7644b54b497c986378a7d8c8b67
|
||||||
F test/tkt-9f2eb3abac.test 85bc63e749f050e6a61c8f9207f1eee65c9d3395
|
F test/tkt-9f2eb3abac.test 85bc63e749f050e6a61c8f9207f1eee65c9d3395
|
||||||
F test/tkt-a7b7803e.test 159ef554234fa1f9fb318c751b284bd1cf858da4
|
F test/tkt-a7b7803e.test 159ef554234fa1f9fb318c751b284bd1cf858da4
|
||||||
@@ -1056,9 +1057,9 @@ F test/vtabE.test 7c4693638d7797ce2eda17af74292b97e705cc61
|
|||||||
F test/vtabF.test fd5ad376f5a34fe0891df1f3cddb4fe7c3eb077e
|
F test/vtabF.test fd5ad376f5a34fe0891df1f3cddb4fe7c3eb077e
|
||||||
F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
|
F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
|
||||||
F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
|
F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
|
||||||
F test/vtab_shared.test 82f463886e18d7f8395a4b6167c91815efe54839
|
F test/vtab_shared.test 6acafaae7126c9f49be72c2f57eb8bef3024f1cb
|
||||||
F test/wal.test a59d00eaa0901e42b8a2ef21f2a4c972ee1f1bd4
|
F test/wal.test 40073e54359d43354925b2b700b7eebd5e207285
|
||||||
F test/wal2.test d4b470f13c87f6d8268b004380afa04c3c67cb90
|
F test/wal2.test a8e3963abf6b232cf0b852b09b53665ef34007af
|
||||||
F test/wal3.test b22eb662bcbc148c5f6d956eaf94b047f7afe9c0
|
F test/wal3.test b22eb662bcbc148c5f6d956eaf94b047f7afe9c0
|
||||||
F test/wal4.test 4744e155cd6299c6bd99d3eab1c82f77db9cdb3c
|
F test/wal4.test 4744e155cd6299c6bd99d3eab1c82f77db9cdb3c
|
||||||
F test/wal5.test 8f888b50f66b78821e61ed0e233ded5de378224b
|
F test/wal5.test 8f888b50f66b78821e61ed0e233ded5de378224b
|
||||||
@@ -1073,7 +1074,7 @@ F test/walcksum.test 9afeb96240296c08c72fc524d199c912cfe34daa
|
|||||||
F test/walcrash.test 451d79e528add5c42764cea74aa2750754171b25
|
F test/walcrash.test 451d79e528add5c42764cea74aa2750754171b25
|
||||||
F test/walcrash2.test a0edab4e5390f03b99a790de89aad15d6ec70b36
|
F test/walcrash2.test a0edab4e5390f03b99a790de89aad15d6ec70b36
|
||||||
F test/walcrash3.test e426aa58122d20f2b9fbe9a507f9eb8cab85b8af
|
F test/walcrash3.test e426aa58122d20f2b9fbe9a507f9eb8cab85b8af
|
||||||
F test/walfault.test 54ad6e849c727f4da463964b9eb8c8e8e155cf82
|
F test/walfault.test 1f8389f7709877e9b4cc679033d71d6fe529056b
|
||||||
F test/walhook.test ed00a40ba7255da22d6b66433ab61fab16a63483
|
F test/walhook.test ed00a40ba7255da22d6b66433ab61fab16a63483
|
||||||
F test/walmode.test 4022fe03ae6e830583672caa101f046438a0473c
|
F test/walmode.test 4022fe03ae6e830583672caa101f046438a0473c
|
||||||
F test/walnoshm.test 84ca10c544632a756467336b7c3b864d493ee496
|
F test/walnoshm.test 84ca10c544632a756467336b7c3b864d493ee496
|
||||||
@@ -1161,7 +1162,7 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
|
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
|
||||||
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
||||||
P e579661a7950fe9f8eb10012946100c874ba54b0 5716fc2341ddd8cf64139e7168597f864da4e10b
|
P 32477642d79615fb85680bdac812ad9655cf6902 cc72c5aec7fe93d4a1368517aab949dc98d33003
|
||||||
R 44ea540ed51c079699ffafd30e405197
|
R 78ce3efefe8e1d1aa8c19dbbb86af6d1
|
||||||
U drh
|
U drh
|
||||||
Z a4d623448ba4efed34874461e572fbbf
|
Z 99f0c83c836f43da179f2c44da61e31f
|
||||||
|
@@ -1 +1 @@
|
|||||||
32477642d79615fb85680bdac812ad9655cf6902
|
cfd110bf5db2c1993a5e2ca718648bd9c17ee22c
|
@@ -38,10 +38,6 @@ static int resolveAttachExpr(NameContext *pName, Expr *pExpr)
|
|||||||
if( pExpr ){
|
if( pExpr ){
|
||||||
if( pExpr->op!=TK_ID ){
|
if( pExpr->op!=TK_ID ){
|
||||||
rc = sqlite3ResolveExprNames(pName, pExpr);
|
rc = sqlite3ResolveExprNames(pName, pExpr);
|
||||||
if( rc==SQLITE_OK && !sqlite3ExprIsConstant(pExpr) ){
|
|
||||||
sqlite3ErrorMsg(pName->pParse, "invalid name: \"%s\"", pExpr->u.zToken);
|
|
||||||
return SQLITE_ERROR;
|
|
||||||
}
|
|
||||||
}else{
|
}else{
|
||||||
pExpr->op = TK_STRING;
|
pExpr->op = TK_STRING;
|
||||||
}
|
}
|
||||||
|
12
src/delete.c
12
src/delete.c
@@ -780,7 +780,6 @@ int sqlite3GenerateIndexKey(
|
|||||||
Table *pTab = pIdx->pTable;
|
Table *pTab = pIdx->pTable;
|
||||||
int regBase;
|
int regBase;
|
||||||
int nCol;
|
int nCol;
|
||||||
Index *pPk;
|
|
||||||
|
|
||||||
if( piPartIdxLabel ){
|
if( piPartIdxLabel ){
|
||||||
if( pIdx->pPartIdxWhere ){
|
if( pIdx->pPartIdxWhere ){
|
||||||
@@ -794,16 +793,9 @@ int sqlite3GenerateIndexKey(
|
|||||||
}
|
}
|
||||||
nCol = (prefixOnly && pIdx->uniqNotNull) ? pIdx->nKeyCol : pIdx->nColumn;
|
nCol = (prefixOnly && pIdx->uniqNotNull) ? pIdx->nKeyCol : pIdx->nColumn;
|
||||||
regBase = sqlite3GetTempRange(pParse, nCol);
|
regBase = sqlite3GetTempRange(pParse, nCol);
|
||||||
pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab);
|
|
||||||
for(j=0; j<nCol; j++){
|
for(j=0; j<nCol; j++){
|
||||||
i16 idx = pIdx->aiColumn[j];
|
sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, pIdx->aiColumn[j],
|
||||||
if( pPk ) idx = sqlite3ColumnOfIndex(pPk, idx);
|
regBase+j);
|
||||||
if( idx<0 || idx==pTab->iPKey ){
|
|
||||||
sqlite3VdbeAddOp2(v, OP_Rowid, iDataCur, regBase+j);
|
|
||||||
}else{
|
|
||||||
sqlite3VdbeAddOp3(v, OP_Column, iDataCur, idx, regBase+j);
|
|
||||||
sqlite3ColumnDefault(v, pTab, pIdx->aiColumn[j], -1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if( regOut ){
|
if( regOut ){
|
||||||
const char *zAff;
|
const char *zAff;
|
||||||
|
27
src/expr.c
27
src/expr.c
@@ -2170,6 +2170,11 @@ void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){
|
|||||||
*/
|
*/
|
||||||
void sqlite3ExprCachePush(Parse *pParse){
|
void sqlite3ExprCachePush(Parse *pParse){
|
||||||
pParse->iCacheLevel++;
|
pParse->iCacheLevel++;
|
||||||
|
#ifdef SQLITE_DEBUG
|
||||||
|
if( pParse->db->flags & SQLITE_VdbeAddopTrace ){
|
||||||
|
printf("PUSH to %d\n", pParse->iCacheLevel);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2183,6 +2188,11 @@ void sqlite3ExprCachePop(Parse *pParse, int N){
|
|||||||
assert( N>0 );
|
assert( N>0 );
|
||||||
assert( pParse->iCacheLevel>=N );
|
assert( pParse->iCacheLevel>=N );
|
||||||
pParse->iCacheLevel -= N;
|
pParse->iCacheLevel -= N;
|
||||||
|
#ifdef SQLITE_DEBUG
|
||||||
|
if( pParse->db->flags & SQLITE_VdbeAddopTrace ){
|
||||||
|
printf("POP to %d\n", pParse->iCacheLevel);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
|
for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
|
||||||
if( p->iReg && p->iLevel>pParse->iCacheLevel ){
|
if( p->iReg && p->iLevel>pParse->iCacheLevel ){
|
||||||
cacheEntryClear(pParse, p);
|
cacheEntryClear(pParse, p);
|
||||||
@@ -2277,6 +2287,11 @@ void sqlite3ExprCacheClear(Parse *pParse){
|
|||||||
int i;
|
int i;
|
||||||
struct yColCache *p;
|
struct yColCache *p;
|
||||||
|
|
||||||
|
#if SQLITE_DEBUG
|
||||||
|
if( pParse->db->flags & SQLITE_VdbeAddopTrace ){
|
||||||
|
printf("CLEAR\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
|
for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
|
||||||
if( p->iReg ){
|
if( p->iReg ){
|
||||||
cacheEntryClear(pParse, p);
|
cacheEntryClear(pParse, p);
|
||||||
@@ -3413,7 +3428,17 @@ int sqlite3ExprCodeExprList(
|
|||||||
}else{
|
}else{
|
||||||
int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
|
int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
|
||||||
if( inReg!=target+i ){
|
if( inReg!=target+i ){
|
||||||
sqlite3VdbeAddOp2(pParse->pVdbe, copyOp, inReg, target+i);
|
VdbeOp *pOp;
|
||||||
|
Vdbe *v = pParse->pVdbe;
|
||||||
|
if( copyOp==OP_Copy
|
||||||
|
&& (pOp=sqlite3VdbeGetOp(v, -1))->opcode==OP_Copy
|
||||||
|
&& pOp->p1+pOp->p3+1==inReg
|
||||||
|
&& pOp->p2+pOp->p3+1==target+i
|
||||||
|
){
|
||||||
|
pOp->p3++;
|
||||||
|
}else{
|
||||||
|
sqlite3VdbeAddOp2(v, copyOp, inReg, target+i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
27
src/func.c
27
src/func.c
@@ -218,6 +218,32 @@ static void instrFunc(
|
|||||||
sqlite3_result_int(context, N);
|
sqlite3_result_int(context, N);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Implementation of the printf() function.
|
||||||
|
*/
|
||||||
|
static void printfFunc(
|
||||||
|
sqlite3_context *context,
|
||||||
|
int argc,
|
||||||
|
sqlite3_value **argv
|
||||||
|
){
|
||||||
|
PrintfArguments x;
|
||||||
|
StrAccum str;
|
||||||
|
const char *zFormat;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
|
||||||
|
x.nArg = argc-1;
|
||||||
|
x.nUsed = 0;
|
||||||
|
x.apArg = argv+1;
|
||||||
|
sqlite3StrAccumInit(&str, 0, 0, SQLITE_MAX_LENGTH);
|
||||||
|
str.db = sqlite3_context_db_handle(context);
|
||||||
|
sqlite3XPrintf(&str, SQLITE_PRINTF_SQLFUNC, zFormat, &x);
|
||||||
|
n = str.nChar;
|
||||||
|
sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,
|
||||||
|
SQLITE_DYNAMIC);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Implementation of the substr() function.
|
** Implementation of the substr() function.
|
||||||
**
|
**
|
||||||
@@ -1648,6 +1674,7 @@ void sqlite3RegisterGlobalFunctions(void){
|
|||||||
FUNCTION(instr, 2, 0, 0, instrFunc ),
|
FUNCTION(instr, 2, 0, 0, instrFunc ),
|
||||||
FUNCTION(substr, 2, 0, 0, substrFunc ),
|
FUNCTION(substr, 2, 0, 0, substrFunc ),
|
||||||
FUNCTION(substr, 3, 0, 0, substrFunc ),
|
FUNCTION(substr, 3, 0, 0, substrFunc ),
|
||||||
|
FUNCTION(printf, -1, 0, 0, printfFunc ),
|
||||||
FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
|
FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
|
||||||
FUNCTION(char, -1, 0, 0, charFunc ),
|
FUNCTION(char, -1, 0, 0, charFunc ),
|
||||||
FUNCTION(abs, 1, 0, 0, absFunc ),
|
FUNCTION(abs, 1, 0, 0, absFunc ),
|
||||||
|
80
src/insert.c
80
src/insert.c
@@ -1515,47 +1515,49 @@ void sqlite3GenerateConstraintChecks(
|
|||||||
|
|
||||||
/* Generate code to handle collisions */
|
/* Generate code to handle collisions */
|
||||||
regR = (pIdx==pPk) ? regIdx : sqlite3GetTempRange(pParse, nPkField);
|
regR = (pIdx==pPk) ? regIdx : sqlite3GetTempRange(pParse, nPkField);
|
||||||
if( HasRowid(pTab) ){
|
if( isUpdate || onError==OE_Replace ){
|
||||||
sqlite3VdbeAddOp2(v, OP_IdxRowid, iThisCur, regR);
|
if( HasRowid(pTab) ){
|
||||||
/* Conflict only if the rowid of the existing index entry
|
sqlite3VdbeAddOp2(v, OP_IdxRowid, iThisCur, regR);
|
||||||
** is different from old-rowid */
|
/* Conflict only if the rowid of the existing index entry
|
||||||
if( isUpdate ){
|
** is different from old-rowid */
|
||||||
sqlite3VdbeAddOp3(v, OP_Eq, regR, addrUniqueOk, regOldData);
|
if( isUpdate ){
|
||||||
}
|
sqlite3VdbeAddOp3(v, OP_Eq, regR, addrUniqueOk, regOldData);
|
||||||
}else{
|
|
||||||
int x;
|
|
||||||
/* Extract the PRIMARY KEY from the end of the index entry and
|
|
||||||
** store it in registers regR..regR+nPk-1 */
|
|
||||||
if( (isUpdate || onError==OE_Replace) && pIdx!=pPk ){
|
|
||||||
for(i=0; i<pPk->nKeyCol; i++){
|
|
||||||
x = sqlite3ColumnOfIndex(pIdx, pPk->aiColumn[i]);
|
|
||||||
sqlite3VdbeAddOp3(v, OP_Column, iThisCur, x, regR+i);
|
|
||||||
VdbeComment((v, "%s.%s", pTab->zName,
|
|
||||||
pTab->aCol[pPk->aiColumn[i]].zName));
|
|
||||||
}
|
}
|
||||||
}
|
}else{
|
||||||
if( isUpdate ){
|
int x;
|
||||||
/* If currently processing the PRIMARY KEY of a WITHOUT ROWID
|
/* Extract the PRIMARY KEY from the end of the index entry and
|
||||||
** table, only conflict if the new PRIMARY KEY values are actually
|
** store it in registers regR..regR+nPk-1 */
|
||||||
** different from the old.
|
if( pIdx!=pPk ){
|
||||||
**
|
for(i=0; i<pPk->nKeyCol; i++){
|
||||||
** For a UNIQUE index, only conflict if the PRIMARY KEY values
|
x = sqlite3ColumnOfIndex(pIdx, pPk->aiColumn[i]);
|
||||||
** of the matched index row are different from the original PRIMARY
|
sqlite3VdbeAddOp3(v, OP_Column, iThisCur, x, regR+i);
|
||||||
** KEY values of this row before the update. */
|
VdbeComment((v, "%s.%s", pTab->zName,
|
||||||
int addrJump = sqlite3VdbeCurrentAddr(v)+pPk->nKeyCol;
|
pTab->aCol[pPk->aiColumn[i]].zName));
|
||||||
int op = OP_Ne;
|
}
|
||||||
int regCmp = (pIdx->autoIndex==2 ? regIdx : regR);
|
}
|
||||||
|
if( isUpdate ){
|
||||||
for(i=0; i<pPk->nKeyCol; i++){
|
/* If currently processing the PRIMARY KEY of a WITHOUT ROWID
|
||||||
char *p4 = (char*)sqlite3LocateCollSeq(pParse, pPk->azColl[i]);
|
** table, only conflict if the new PRIMARY KEY values are actually
|
||||||
x = pPk->aiColumn[i];
|
** different from the old.
|
||||||
if( i==(pPk->nKeyCol-1) ){
|
**
|
||||||
addrJump = addrUniqueOk;
|
** For a UNIQUE index, only conflict if the PRIMARY KEY values
|
||||||
op = OP_Eq;
|
** of the matched index row are different from the original PRIMARY
|
||||||
|
** KEY values of this row before the update. */
|
||||||
|
int addrJump = sqlite3VdbeCurrentAddr(v)+pPk->nKeyCol;
|
||||||
|
int op = OP_Ne;
|
||||||
|
int regCmp = (pIdx->autoIndex==2 ? regIdx : regR);
|
||||||
|
|
||||||
|
for(i=0; i<pPk->nKeyCol; i++){
|
||||||
|
char *p4 = (char*)sqlite3LocateCollSeq(pParse, pPk->azColl[i]);
|
||||||
|
x = pPk->aiColumn[i];
|
||||||
|
if( i==(pPk->nKeyCol-1) ){
|
||||||
|
addrJump = addrUniqueOk;
|
||||||
|
op = OP_Eq;
|
||||||
|
}
|
||||||
|
sqlite3VdbeAddOp4(v, op,
|
||||||
|
regOldData+1+x, addrJump, regCmp+i, p4, P4_COLLSEQ
|
||||||
|
);
|
||||||
}
|
}
|
||||||
sqlite3VdbeAddOp4(v, op,
|
|
||||||
regOldData+1+x, addrJump, regCmp+i, p4, P4_COLLSEQ
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1062,8 +1062,7 @@ void sqlite3RollbackAll(sqlite3 *db, int tripCode){
|
|||||||
** Return a static string containing the name corresponding to the error code
|
** Return a static string containing the name corresponding to the error code
|
||||||
** specified in the argument.
|
** specified in the argument.
|
||||||
*/
|
*/
|
||||||
#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) || \
|
#if defined(SQLITE_TEST)
|
||||||
defined(SQLITE_DEBUG_OS_TRACE)
|
|
||||||
const char *sqlite3ErrName(int rc){
|
const char *sqlite3ErrName(int rc){
|
||||||
const char *zName = 0;
|
const char *zName = 0;
|
||||||
int i, origRc = rc;
|
int i, origRc = rc;
|
||||||
@@ -2662,6 +2661,8 @@ static int openDatabase(
|
|||||||
SQLITE_DEFAULT_LOCKING_MODE);
|
SQLITE_DEFAULT_LOCKING_MODE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if( rc ) sqlite3Error(db, rc, 0);
|
||||||
|
|
||||||
/* Enable the lookaside-malloc subsystem */
|
/* Enable the lookaside-malloc subsystem */
|
||||||
setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside,
|
setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside,
|
||||||
sqlite3GlobalConfig.nLookaside);
|
sqlite3GlobalConfig.nLookaside);
|
||||||
|
16
src/os.c
16
src/os.c
@@ -107,7 +107,21 @@ int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut){
|
|||||||
** routine has no return value since the return value would be meaningless.
|
** routine has no return value since the return value would be meaningless.
|
||||||
*/
|
*/
|
||||||
int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){
|
int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){
|
||||||
DO_OS_MALLOC_TEST(id);
|
#ifdef SQLITE_TEST
|
||||||
|
if( op!=SQLITE_FCNTL_COMMIT_PHASETWO ){
|
||||||
|
/* Faults are not injected into COMMIT_PHASETWO because, assuming SQLite
|
||||||
|
** is using a regular VFS, it is called after the corresponding
|
||||||
|
** transaction has been committed. Injecting a fault at this point
|
||||||
|
** confuses the test scripts - the COMMIT comand returns SQLITE_NOMEM
|
||||||
|
** but the transaction is committed anyway.
|
||||||
|
**
|
||||||
|
** The core must call OsFileControl() though, not OsFileControlHint(),
|
||||||
|
** as if a custom VFS (e.g. zipvfs) returns an error here, it probably
|
||||||
|
** means the commit really has failed and an error should be returned
|
||||||
|
** to the user. */
|
||||||
|
DO_OS_MALLOC_TEST(id);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return id->pMethods->xFileControl(id, op, pArg);
|
return id->pMethods->xFileControl(id, op, pArg);
|
||||||
}
|
}
|
||||||
void sqlite3OsFileControlHint(sqlite3_file *id, int op, void *pArg){
|
void sqlite3OsFileControlHint(sqlite3_file *id, int op, void *pArg){
|
||||||
|
@@ -528,7 +528,11 @@ int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){
|
|||||||
** Free all memory allocations in the pParse object
|
** Free all memory allocations in the pParse object
|
||||||
*/
|
*/
|
||||||
void sqlite3ParserReset(Parse *pParse){
|
void sqlite3ParserReset(Parse *pParse){
|
||||||
if( pParse ) sqlite3ExprListDelete(pParse->db, pParse->pConstExpr);
|
if( pParse ){
|
||||||
|
sqlite3 *db = pParse->db;
|
||||||
|
sqlite3DbFree(db, pParse->aLabel);
|
||||||
|
sqlite3ExprListDelete(db, pParse->pConstExpr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
103
src/printf.c
103
src/printf.c
@@ -151,11 +151,28 @@ void sqlite3AppendSpace(StrAccum *pAccum, int N){
|
|||||||
/*
|
/*
|
||||||
** Set the StrAccum object to an error mode.
|
** Set the StrAccum object to an error mode.
|
||||||
*/
|
*/
|
||||||
void setStrAccumError(StrAccum *p, u8 eError){
|
static void setStrAccumError(StrAccum *p, u8 eError){
|
||||||
p->accError = eError;
|
p->accError = eError;
|
||||||
p->nAlloc = 0;
|
p->nAlloc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Extra argument values from a PrintfArguments object
|
||||||
|
*/
|
||||||
|
static sqlite3_int64 getIntArg(PrintfArguments *p){
|
||||||
|
if( p->nArg<=p->nUsed ) return 0;
|
||||||
|
return sqlite3_value_int64(p->apArg[p->nUsed++]);
|
||||||
|
}
|
||||||
|
static double getDoubleArg(PrintfArguments *p){
|
||||||
|
if( p->nArg<=p->nUsed ) return 0.0;
|
||||||
|
return sqlite3_value_double(p->apArg[p->nUsed++]);
|
||||||
|
}
|
||||||
|
static char *getTextArg(PrintfArguments *p){
|
||||||
|
if( p->nArg<=p->nUsed ) return 0;
|
||||||
|
return (char*)sqlite3_value_text(p->apArg[p->nUsed++]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** On machines with a small stack size, you can redefine the
|
** On machines with a small stack size, you can redefine the
|
||||||
** SQLITE_PRINT_BUF_SIZE to be something smaller, if desired.
|
** SQLITE_PRINT_BUF_SIZE to be something smaller, if desired.
|
||||||
@@ -169,10 +186,10 @@ void setStrAccumError(StrAccum *p, u8 eError){
|
|||||||
** Render a string given by "fmt" into the StrAccum object.
|
** Render a string given by "fmt" into the StrAccum object.
|
||||||
*/
|
*/
|
||||||
void sqlite3VXPrintf(
|
void sqlite3VXPrintf(
|
||||||
StrAccum *pAccum, /* Accumulate results here */
|
StrAccum *pAccum, /* Accumulate results here */
|
||||||
int useExtended, /* Allow extended %-conversions */
|
u32 bFlags, /* SQLITE_PRINTF_* flags */
|
||||||
const char *fmt, /* Format string */
|
const char *fmt, /* Format string */
|
||||||
va_list ap /* arguments */
|
va_list ap /* arguments */
|
||||||
){
|
){
|
||||||
int c; /* Next character in the format string */
|
int c; /* Next character in the format string */
|
||||||
char *bufpt; /* Pointer to the conversion buffer */
|
char *bufpt; /* Pointer to the conversion buffer */
|
||||||
@@ -190,6 +207,8 @@ void sqlite3VXPrintf(
|
|||||||
etByte flag_longlong; /* True if the "ll" flag is present */
|
etByte flag_longlong; /* True if the "ll" flag is present */
|
||||||
etByte done; /* Loop termination flag */
|
etByte done; /* Loop termination flag */
|
||||||
etByte xtype = 0; /* Conversion paradigm */
|
etByte xtype = 0; /* Conversion paradigm */
|
||||||
|
u8 bArgList; /* True for SQLITE_PRINTF_SQLFUNC */
|
||||||
|
u8 useIntern; /* Ok to use internal conversions (ex: %T) */
|
||||||
char prefix; /* Prefix character. "+" or "-" or " " or '\0'. */
|
char prefix; /* Prefix character. "+" or "-" or " " or '\0'. */
|
||||||
sqlite_uint64 longvalue; /* Value for integer types */
|
sqlite_uint64 longvalue; /* Value for integer types */
|
||||||
LONGDOUBLE_TYPE realvalue; /* Value for real types */
|
LONGDOUBLE_TYPE realvalue; /* Value for real types */
|
||||||
@@ -204,9 +223,18 @@ void sqlite3VXPrintf(
|
|||||||
etByte flag_dp; /* True if decimal point should be shown */
|
etByte flag_dp; /* True if decimal point should be shown */
|
||||||
etByte flag_rtz; /* True if trailing zeros should be removed */
|
etByte flag_rtz; /* True if trailing zeros should be removed */
|
||||||
#endif
|
#endif
|
||||||
|
PrintfArguments *pArgList = 0; /* Arguments for SQLITE_PRINTF_SQLFUNC */
|
||||||
char buf[etBUFSIZE]; /* Conversion buffer */
|
char buf[etBUFSIZE]; /* Conversion buffer */
|
||||||
|
|
||||||
bufpt = 0;
|
bufpt = 0;
|
||||||
|
if( bFlags ){
|
||||||
|
if( (bArgList = (bFlags & SQLITE_PRINTF_SQLFUNC))!=0 ){
|
||||||
|
pArgList = va_arg(ap, PrintfArguments*);
|
||||||
|
}
|
||||||
|
useIntern = bFlags & SQLITE_PRINTF_INTERNAL;
|
||||||
|
}else{
|
||||||
|
bArgList = useIntern = 0;
|
||||||
|
}
|
||||||
for(; (c=(*fmt))!=0; ++fmt){
|
for(; (c=(*fmt))!=0; ++fmt){
|
||||||
if( c!='%' ){
|
if( c!='%' ){
|
||||||
int amt;
|
int amt;
|
||||||
@@ -238,7 +266,11 @@ void sqlite3VXPrintf(
|
|||||||
/* Get the field width */
|
/* Get the field width */
|
||||||
width = 0;
|
width = 0;
|
||||||
if( c=='*' ){
|
if( c=='*' ){
|
||||||
width = va_arg(ap,int);
|
if( bArgList ){
|
||||||
|
width = (int)getIntArg(pArgList);
|
||||||
|
}else{
|
||||||
|
width = va_arg(ap,int);
|
||||||
|
}
|
||||||
if( width<0 ){
|
if( width<0 ){
|
||||||
flag_leftjustify = 1;
|
flag_leftjustify = 1;
|
||||||
width = -width;
|
width = -width;
|
||||||
@@ -255,7 +287,11 @@ void sqlite3VXPrintf(
|
|||||||
precision = 0;
|
precision = 0;
|
||||||
c = *++fmt;
|
c = *++fmt;
|
||||||
if( c=='*' ){
|
if( c=='*' ){
|
||||||
precision = va_arg(ap,int);
|
if( bArgList ){
|
||||||
|
precision = (int)getIntArg(pArgList);
|
||||||
|
}else{
|
||||||
|
precision = va_arg(ap,int);
|
||||||
|
}
|
||||||
if( precision<0 ) precision = -precision;
|
if( precision<0 ) precision = -precision;
|
||||||
c = *++fmt;
|
c = *++fmt;
|
||||||
}else{
|
}else{
|
||||||
@@ -286,7 +322,7 @@ void sqlite3VXPrintf(
|
|||||||
for(idx=0; idx<ArraySize(fmtinfo); idx++){
|
for(idx=0; idx<ArraySize(fmtinfo); idx++){
|
||||||
if( c==fmtinfo[idx].fmttype ){
|
if( c==fmtinfo[idx].fmttype ){
|
||||||
infop = &fmtinfo[idx];
|
infop = &fmtinfo[idx];
|
||||||
if( useExtended || (infop->flags & FLAG_INTERN)==0 ){
|
if( useIntern || (infop->flags & FLAG_INTERN)==0 ){
|
||||||
xtype = infop->type;
|
xtype = infop->type;
|
||||||
}else{
|
}else{
|
||||||
return;
|
return;
|
||||||
@@ -326,7 +362,9 @@ void sqlite3VXPrintf(
|
|||||||
case etRADIX:
|
case etRADIX:
|
||||||
if( infop->flags & FLAG_SIGNED ){
|
if( infop->flags & FLAG_SIGNED ){
|
||||||
i64 v;
|
i64 v;
|
||||||
if( flag_longlong ){
|
if( bArgList ){
|
||||||
|
v = getIntArg(pArgList);
|
||||||
|
}else if( flag_longlong ){
|
||||||
v = va_arg(ap,i64);
|
v = va_arg(ap,i64);
|
||||||
}else if( flag_long ){
|
}else if( flag_long ){
|
||||||
v = va_arg(ap,long int);
|
v = va_arg(ap,long int);
|
||||||
@@ -347,7 +385,9 @@ void sqlite3VXPrintf(
|
|||||||
else prefix = 0;
|
else prefix = 0;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
if( flag_longlong ){
|
if( bArgList ){
|
||||||
|
longvalue = (u64)getIntArg(pArgList);
|
||||||
|
}else if( flag_longlong ){
|
||||||
longvalue = va_arg(ap,u64);
|
longvalue = va_arg(ap,u64);
|
||||||
}else if( flag_long ){
|
}else if( flag_long ){
|
||||||
longvalue = va_arg(ap,unsigned long int);
|
longvalue = va_arg(ap,unsigned long int);
|
||||||
@@ -407,7 +447,11 @@ void sqlite3VXPrintf(
|
|||||||
case etFLOAT:
|
case etFLOAT:
|
||||||
case etEXP:
|
case etEXP:
|
||||||
case etGENERIC:
|
case etGENERIC:
|
||||||
realvalue = va_arg(ap,double);
|
if( bArgList ){
|
||||||
|
realvalue = getDoubleArg(pArgList);
|
||||||
|
}else{
|
||||||
|
realvalue = va_arg(ap,double);
|
||||||
|
}
|
||||||
#ifdef SQLITE_OMIT_FLOATING_POINT
|
#ifdef SQLITE_OMIT_FLOATING_POINT
|
||||||
length = 0;
|
length = 0;
|
||||||
#else
|
#else
|
||||||
@@ -562,7 +606,9 @@ void sqlite3VXPrintf(
|
|||||||
#endif /* !defined(SQLITE_OMIT_FLOATING_POINT) */
|
#endif /* !defined(SQLITE_OMIT_FLOATING_POINT) */
|
||||||
break;
|
break;
|
||||||
case etSIZE:
|
case etSIZE:
|
||||||
*(va_arg(ap,int*)) = pAccum->nChar;
|
if( !bArgList ){
|
||||||
|
*(va_arg(ap,int*)) = pAccum->nChar;
|
||||||
|
}
|
||||||
length = width = 0;
|
length = width = 0;
|
||||||
break;
|
break;
|
||||||
case etPERCENT:
|
case etPERCENT:
|
||||||
@@ -571,7 +617,12 @@ void sqlite3VXPrintf(
|
|||||||
length = 1;
|
length = 1;
|
||||||
break;
|
break;
|
||||||
case etCHARX:
|
case etCHARX:
|
||||||
c = va_arg(ap,int);
|
if( bArgList ){
|
||||||
|
bufpt = getTextArg(pArgList);
|
||||||
|
c = bufpt ? bufpt[0] : 0;
|
||||||
|
}else{
|
||||||
|
c = va_arg(ap,int);
|
||||||
|
}
|
||||||
buf[0] = (char)c;
|
buf[0] = (char)c;
|
||||||
if( precision>=0 ){
|
if( precision>=0 ){
|
||||||
for(idx=1; idx<precision; idx++) buf[idx] = (char)c;
|
for(idx=1; idx<precision; idx++) buf[idx] = (char)c;
|
||||||
@@ -583,10 +634,14 @@ void sqlite3VXPrintf(
|
|||||||
break;
|
break;
|
||||||
case etSTRING:
|
case etSTRING:
|
||||||
case etDYNSTRING:
|
case etDYNSTRING:
|
||||||
bufpt = va_arg(ap,char*);
|
if( bArgList ){
|
||||||
|
bufpt = getTextArg(pArgList);
|
||||||
|
}else{
|
||||||
|
bufpt = va_arg(ap,char*);
|
||||||
|
}
|
||||||
if( bufpt==0 ){
|
if( bufpt==0 ){
|
||||||
bufpt = "";
|
bufpt = "";
|
||||||
}else if( xtype==etDYNSTRING ){
|
}else if( xtype==etDYNSTRING && !bArgList ){
|
||||||
zExtra = bufpt;
|
zExtra = bufpt;
|
||||||
}
|
}
|
||||||
if( precision>=0 ){
|
if( precision>=0 ){
|
||||||
@@ -602,7 +657,13 @@ void sqlite3VXPrintf(
|
|||||||
int needQuote;
|
int needQuote;
|
||||||
char ch;
|
char ch;
|
||||||
char q = ((xtype==etSQLESCAPE3)?'"':'\''); /* Quote character */
|
char q = ((xtype==etSQLESCAPE3)?'"':'\''); /* Quote character */
|
||||||
char *escarg = va_arg(ap,char*);
|
char *escarg;
|
||||||
|
|
||||||
|
if( bArgList ){
|
||||||
|
escarg = getTextArg(pArgList);
|
||||||
|
}else{
|
||||||
|
escarg = va_arg(ap,char*);
|
||||||
|
}
|
||||||
isnull = escarg==0;
|
isnull = escarg==0;
|
||||||
if( isnull ) escarg = (xtype==etSQLESCAPE2 ? "NULL" : "(NULL)");
|
if( isnull ) escarg = (xtype==etSQLESCAPE2 ? "NULL" : "(NULL)");
|
||||||
k = precision;
|
k = precision;
|
||||||
@@ -637,6 +698,7 @@ void sqlite3VXPrintf(
|
|||||||
}
|
}
|
||||||
case etTOKEN: {
|
case etTOKEN: {
|
||||||
Token *pToken = va_arg(ap, Token*);
|
Token *pToken = va_arg(ap, Token*);
|
||||||
|
assert( bArgList==0 );
|
||||||
if( pToken && pToken->n ){
|
if( pToken && pToken->n ){
|
||||||
sqlite3StrAccumAppend(pAccum, (const char*)pToken->z, pToken->n);
|
sqlite3StrAccumAppend(pAccum, (const char*)pToken->z, pToken->n);
|
||||||
}
|
}
|
||||||
@@ -647,6 +709,7 @@ void sqlite3VXPrintf(
|
|||||||
SrcList *pSrc = va_arg(ap, SrcList*);
|
SrcList *pSrc = va_arg(ap, SrcList*);
|
||||||
int k = va_arg(ap, int);
|
int k = va_arg(ap, int);
|
||||||
struct SrcList_item *pItem = &pSrc->a[k];
|
struct SrcList_item *pItem = &pSrc->a[k];
|
||||||
|
assert( bArgList==0 );
|
||||||
assert( k>=0 && k<pSrc->nSrc );
|
assert( k>=0 && k<pSrc->nSrc );
|
||||||
if( pItem->zDatabase ){
|
if( pItem->zDatabase ){
|
||||||
sqlite3StrAccumAppendAll(pAccum, pItem->zDatabase);
|
sqlite3StrAccumAppendAll(pAccum, pItem->zDatabase);
|
||||||
@@ -810,7 +873,7 @@ char *sqlite3VMPrintf(sqlite3 *db, const char *zFormat, va_list ap){
|
|||||||
sqlite3StrAccumInit(&acc, zBase, sizeof(zBase),
|
sqlite3StrAccumInit(&acc, zBase, sizeof(zBase),
|
||||||
db->aLimit[SQLITE_LIMIT_LENGTH]);
|
db->aLimit[SQLITE_LIMIT_LENGTH]);
|
||||||
acc.db = db;
|
acc.db = db;
|
||||||
sqlite3VXPrintf(&acc, 1, zFormat, ap);
|
sqlite3VXPrintf(&acc, SQLITE_PRINTF_INTERNAL, zFormat, ap);
|
||||||
z = sqlite3StrAccumFinish(&acc);
|
z = sqlite3StrAccumFinish(&acc);
|
||||||
if( acc.accError==STRACCUM_NOMEM ){
|
if( acc.accError==STRACCUM_NOMEM ){
|
||||||
db->mallocFailed = 1;
|
db->mallocFailed = 1;
|
||||||
@@ -966,14 +1029,12 @@ void sqlite3DebugPrintf(const char *zFormat, ...){
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef SQLITE_OMIT_TRACE
|
|
||||||
/*
|
/*
|
||||||
** variable-argument wrapper around sqlite3VXPrintf().
|
** variable-argument wrapper around sqlite3VXPrintf().
|
||||||
*/
|
*/
|
||||||
void sqlite3XPrintf(StrAccum *p, const char *zFormat, ...){
|
void sqlite3XPrintf(StrAccum *p, u32 bFlags, const char *zFormat, ...){
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap,zFormat);
|
va_start(ap,zFormat);
|
||||||
sqlite3VXPrintf(p, 1, zFormat, ap);
|
sqlite3VXPrintf(p, bFlags, zFormat, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
25
src/select.c
25
src/select.c
@@ -598,7 +598,6 @@ static void selectInnerLoop(
|
|||||||
/* If the destination is an EXISTS(...) expression, the actual
|
/* If the destination is an EXISTS(...) expression, the actual
|
||||||
** values returned by the SELECT are not required.
|
** values returned by the SELECT are not required.
|
||||||
*/
|
*/
|
||||||
sqlite3ExprCacheClear(pParse);
|
|
||||||
sqlite3ExprCodeExprList(pParse, pEList, regResult,
|
sqlite3ExprCodeExprList(pParse, pEList, regResult,
|
||||||
(eDest==SRT_Output)?SQLITE_ECEL_DUP:0);
|
(eDest==SRT_Output)?SQLITE_ECEL_DUP:0);
|
||||||
}
|
}
|
||||||
@@ -1565,7 +1564,7 @@ Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
|
|||||||
Vdbe *sqlite3GetVdbe(Parse *pParse){
|
Vdbe *sqlite3GetVdbe(Parse *pParse){
|
||||||
Vdbe *v = pParse->pVdbe;
|
Vdbe *v = pParse->pVdbe;
|
||||||
if( v==0 ){
|
if( v==0 ){
|
||||||
v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db);
|
v = pParse->pVdbe = sqlite3VdbeCreate(pParse);
|
||||||
#ifndef SQLITE_OMIT_TRACE
|
#ifndef SQLITE_OMIT_TRACE
|
||||||
if( v ){
|
if( v ){
|
||||||
sqlite3VdbeAddOp0(v, OP_Trace);
|
sqlite3VdbeAddOp0(v, OP_Trace);
|
||||||
@@ -3823,14 +3822,23 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
|
|||||||
Vdbe *v = pParse->pVdbe;
|
Vdbe *v = pParse->pVdbe;
|
||||||
int i;
|
int i;
|
||||||
struct AggInfo_func *pFunc;
|
struct AggInfo_func *pFunc;
|
||||||
if( pAggInfo->nFunc+pAggInfo->nColumn==0 ){
|
int nReg = pAggInfo->nFunc + pAggInfo->nColumn;
|
||||||
return;
|
if( nReg==0 ) return;
|
||||||
}
|
#ifdef SQLITE_DEBUG
|
||||||
|
/* Verify that all AggInfo registers are within the range specified by
|
||||||
|
** AggInfo.mnReg..AggInfo.mxReg */
|
||||||
|
assert( nReg==pAggInfo->mxReg-pAggInfo->mnReg+1 );
|
||||||
for(i=0; i<pAggInfo->nColumn; i++){
|
for(i=0; i<pAggInfo->nColumn; i++){
|
||||||
sqlite3VdbeAddOp2(v, OP_Null, 0, pAggInfo->aCol[i].iMem);
|
assert( pAggInfo->aCol[i].iMem>=pAggInfo->mnReg
|
||||||
|
&& pAggInfo->aCol[i].iMem<=pAggInfo->mxReg );
|
||||||
}
|
}
|
||||||
|
for(i=0; i<pAggInfo->nFunc; i++){
|
||||||
|
assert( pAggInfo->aFunc[i].iMem>=pAggInfo->mnReg
|
||||||
|
&& pAggInfo->aFunc[i].iMem<=pAggInfo->mxReg );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->mnReg, pAggInfo->mxReg);
|
||||||
for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
|
for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
|
||||||
sqlite3VdbeAddOp2(v, OP_Null, 0, pFunc->iMem);
|
|
||||||
if( pFunc->iDistinct>=0 ){
|
if( pFunc->iDistinct>=0 ){
|
||||||
Expr *pE = pFunc->pExpr;
|
Expr *pE = pFunc->pExpr;
|
||||||
assert( !ExprHasProperty(pE, EP_xIsSelect) );
|
assert( !ExprHasProperty(pE, EP_xIsSelect) );
|
||||||
@@ -3876,7 +3884,6 @@ static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){
|
|||||||
struct AggInfo_col *pC;
|
struct AggInfo_col *pC;
|
||||||
|
|
||||||
pAggInfo->directMode = 1;
|
pAggInfo->directMode = 1;
|
||||||
sqlite3ExprCacheClear(pParse);
|
|
||||||
for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
|
for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
|
||||||
int nArg;
|
int nArg;
|
||||||
int addrNext = 0;
|
int addrNext = 0;
|
||||||
@@ -4409,6 +4416,7 @@ int sqlite3Select(
|
|||||||
sNC.pParse = pParse;
|
sNC.pParse = pParse;
|
||||||
sNC.pSrcList = pTabList;
|
sNC.pSrcList = pTabList;
|
||||||
sNC.pAggInfo = &sAggInfo;
|
sNC.pAggInfo = &sAggInfo;
|
||||||
|
sAggInfo.mnReg = pParse->nMem+1;
|
||||||
sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0;
|
sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0;
|
||||||
sAggInfo.pGroupBy = pGroupBy;
|
sAggInfo.pGroupBy = pGroupBy;
|
||||||
sqlite3ExprAnalyzeAggList(&sNC, pEList);
|
sqlite3ExprAnalyzeAggList(&sNC, pEList);
|
||||||
@@ -4423,6 +4431,7 @@ int sqlite3Select(
|
|||||||
sqlite3ExprAnalyzeAggList(&sNC, sAggInfo.aFunc[i].pExpr->x.pList);
|
sqlite3ExprAnalyzeAggList(&sNC, sAggInfo.aFunc[i].pExpr->x.pList);
|
||||||
sNC.ncFlags &= ~NC_InAggFunc;
|
sNC.ncFlags &= ~NC_InAggFunc;
|
||||||
}
|
}
|
||||||
|
sAggInfo.mxReg = pParse->nMem;
|
||||||
if( db->mallocFailed ) goto select_end;
|
if( db->mallocFailed ) goto select_end;
|
||||||
|
|
||||||
/* Processing for aggregates with GROUP BY is very different and
|
/* Processing for aggregates with GROUP BY is very different and
|
||||||
|
@@ -3038,7 +3038,10 @@ static int process_input(struct callback_data *p, FILE *in){
|
|||||||
seenInterrupt = 0;
|
seenInterrupt = 0;
|
||||||
}
|
}
|
||||||
lineno++;
|
lineno++;
|
||||||
if( nSql==0 && _all_whitespace(zLine) ) continue;
|
if( nSql==0 && _all_whitespace(zLine) ){
|
||||||
|
if( p->echoOn ) printf("%s\n", zLine);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if( zLine && zLine[0]=='.' && nSql==0 ){
|
if( zLine && zLine[0]=='.' && nSql==0 ){
|
||||||
if( p->echoOn ) printf("%s\n", zLine);
|
if( p->echoOn ) printf("%s\n", zLine);
|
||||||
rc = do_meta_command(zLine, p);
|
rc = do_meta_command(zLine, p);
|
||||||
@@ -3100,6 +3103,7 @@ static int process_input(struct callback_data *p, FILE *in){
|
|||||||
}
|
}
|
||||||
nSql = 0;
|
nSql = 0;
|
||||||
}else if( nSql && _all_whitespace(zSql) ){
|
}else if( nSql && _all_whitespace(zSql) ){
|
||||||
|
if( p->echoOn ) printf("%s\n", zSql);
|
||||||
nSql = 0;
|
nSql = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -743,6 +743,7 @@ typedef struct Module Module;
|
|||||||
typedef struct NameContext NameContext;
|
typedef struct NameContext NameContext;
|
||||||
typedef struct Parse Parse;
|
typedef struct Parse Parse;
|
||||||
typedef struct PreUpdate PreUpdate;
|
typedef struct PreUpdate PreUpdate;
|
||||||
|
typedef struct PrintfArguments PrintfArguments;
|
||||||
typedef struct RowSet RowSet;
|
typedef struct RowSet RowSet;
|
||||||
typedef struct Savepoint Savepoint;
|
typedef struct Savepoint Savepoint;
|
||||||
typedef struct Select Select;
|
typedef struct Select Select;
|
||||||
@@ -1695,6 +1696,7 @@ struct AggInfo {
|
|||||||
int sortingIdx; /* Cursor number of the sorting index */
|
int sortingIdx; /* Cursor number of the sorting index */
|
||||||
int sortingIdxPTab; /* Cursor number of pseudo-table */
|
int sortingIdxPTab; /* Cursor number of pseudo-table */
|
||||||
int nSortingColumn; /* Number of columns in the sorting index */
|
int nSortingColumn; /* Number of columns in the sorting index */
|
||||||
|
int mnReg, mxReg; /* Range of registers allocated for aCol and aFunc */
|
||||||
ExprList *pGroupBy; /* The group by clause */
|
ExprList *pGroupBy; /* The group by clause */
|
||||||
struct AggInfo_col { /* For each column used in source tables */
|
struct AggInfo_col { /* For each column used in source tables */
|
||||||
Table *pTab; /* Source table */
|
Table *pTab; /* Source table */
|
||||||
@@ -2296,6 +2298,9 @@ struct Parse {
|
|||||||
int nMem; /* Number of memory cells used so far */
|
int nMem; /* Number of memory cells used so far */
|
||||||
int nSet; /* Number of sets used so far */
|
int nSet; /* Number of sets used so far */
|
||||||
int nOnce; /* Number of OP_Once instructions so far */
|
int nOnce; /* Number of OP_Once instructions so far */
|
||||||
|
int nOpAlloc; /* Number of slots allocated for Vdbe.aOp[] */
|
||||||
|
int nLabel; /* Number of labels used */
|
||||||
|
int *aLabel; /* Space to hold the labels */
|
||||||
int ckBase; /* Base register of data during check constraints */
|
int ckBase; /* Base register of data during check constraints */
|
||||||
int iPartIdxTab; /* Table corresponding to a partial index */
|
int iPartIdxTab; /* Table corresponding to a partial index */
|
||||||
int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */
|
int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */
|
||||||
@@ -2776,10 +2781,20 @@ void sqlite3StatusSet(int, int);
|
|||||||
# define sqlite3IsNaN(X) 0
|
# define sqlite3IsNaN(X) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void sqlite3VXPrintf(StrAccum*, int, const char*, va_list);
|
/*
|
||||||
#ifndef SQLITE_OMIT_TRACE
|
** An instance of the following structure holds information about SQL
|
||||||
void sqlite3XPrintf(StrAccum*, const char*, ...);
|
** functions arguments that are the parameters to the printf() function.
|
||||||
#endif
|
*/
|
||||||
|
struct PrintfArguments {
|
||||||
|
int nArg; /* Total number of arguments */
|
||||||
|
int nUsed; /* Number of arguments used so far */
|
||||||
|
sqlite3_value **apArg; /* The argument values */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define SQLITE_PRINTF_INTERNAL 0x01
|
||||||
|
#define SQLITE_PRINTF_SQLFUNC 0x02
|
||||||
|
void sqlite3VXPrintf(StrAccum*, u32, const char*, va_list);
|
||||||
|
void sqlite3XPrintf(StrAccum*, u32, const char*, ...);
|
||||||
char *sqlite3MPrintf(sqlite3*,const char*, ...);
|
char *sqlite3MPrintf(sqlite3*,const char*, ...);
|
||||||
char *sqlite3VMPrintf(sqlite3*,const char*, va_list);
|
char *sqlite3VMPrintf(sqlite3*,const char*, va_list);
|
||||||
char *sqlite3MAppendf(sqlite3*,char*,const char*,...);
|
char *sqlite3MAppendf(sqlite3*,char*,const char*,...);
|
||||||
@@ -3138,8 +3153,7 @@ void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
|
|||||||
u8 sqlite3HexToInt(int h);
|
u8 sqlite3HexToInt(int h);
|
||||||
int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
|
int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
|
||||||
|
|
||||||
#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) || \
|
#if defined(SQLITE_TEST)
|
||||||
defined(SQLITE_DEBUG_OS_TRACE)
|
|
||||||
const char *sqlite3ErrName(int);
|
const char *sqlite3ErrName(int);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -1574,9 +1574,9 @@ static int DbUseNre(void){
|
|||||||
*/
|
*/
|
||||||
# define SQLITE_TCL_NRE 0
|
# define SQLITE_TCL_NRE 0
|
||||||
# define DbUseNre() 0
|
# define DbUseNre() 0
|
||||||
# define Tcl_NRAddCallback(a,b,c,d,e,f) 0
|
# define Tcl_NRAddCallback(a,b,c,d,e,f) (void)0
|
||||||
# define Tcl_NREvalObj(a,b,c) 0
|
# define Tcl_NREvalObj(a,b,c) 0
|
||||||
# define Tcl_NRCreateCommand(a,b,c,d,e,f) 0
|
# define Tcl_NRCreateCommand(a,b,c,d,e,f) (void)0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2855,7 +2855,7 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
|
|||||||
** or savepoint. */
|
** or savepoint. */
|
||||||
if( DbUseNre() ){
|
if( DbUseNre() ){
|
||||||
Tcl_NRAddCallback(interp, DbTransPostCmd, cd, 0, 0, 0);
|
Tcl_NRAddCallback(interp, DbTransPostCmd, cd, 0, 0, 0);
|
||||||
Tcl_NREvalObj(interp, pScript, 0);
|
(void)Tcl_NREvalObj(interp, pScript, 0);
|
||||||
}else{
|
}else{
|
||||||
rc = DbTransPostCmd(&cd, interp, Tcl_EvalObjEx(interp, pScript, 0));
|
rc = DbTransPostCmd(&cd, interp, Tcl_EvalObjEx(interp, pScript, 0));
|
||||||
}
|
}
|
||||||
@@ -3517,8 +3517,7 @@ static void MD5Final(unsigned char digest[16], MD5Context *ctx){
|
|||||||
byteReverse(ctx->in, 14);
|
byteReverse(ctx->in, 14);
|
||||||
|
|
||||||
/* Append length in bits and transform */
|
/* Append length in bits and transform */
|
||||||
((uint32 *)ctx->in)[ 14 ] = ctx->bits[0];
|
memcpy(ctx->in + 14*4, ctx->bits, 8);
|
||||||
((uint32 *)ctx->in)[ 15 ] = ctx->bits[1];
|
|
||||||
|
|
||||||
MD5Transform(ctx->buf, (uint32 *)ctx->in);
|
MD5Transform(ctx->buf, (uint32 *)ctx->in);
|
||||||
byteReverse((unsigned char *)ctx->buf, 4);
|
byteReverse((unsigned char *)ctx->buf, 4);
|
||||||
|
@@ -72,7 +72,7 @@ void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i, int iReg){
|
|||||||
sqlite3VdbeChangeP4(v, -1, (const char *)pValue, P4_MEM);
|
sqlite3VdbeChangeP4(v, -1, (const char *)pValue, P4_MEM);
|
||||||
}
|
}
|
||||||
#ifndef SQLITE_OMIT_FLOATING_POINT
|
#ifndef SQLITE_OMIT_FLOATING_POINT
|
||||||
if( iReg>=0 && pTab->aCol[i].affinity==SQLITE_AFF_REAL ){
|
if( pTab->aCol[i].affinity==SQLITE_AFF_REAL ){
|
||||||
sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg);
|
sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -496,10 +496,10 @@ void sqlite3Update(
|
|||||||
newmask = sqlite3TriggerColmask(
|
newmask = sqlite3TriggerColmask(
|
||||||
pParse, pTrigger, pChanges, 1, TRIGGER_BEFORE, pTab, onError
|
pParse, pTrigger, pChanges, 1, TRIGGER_BEFORE, pTab, onError
|
||||||
);
|
);
|
||||||
sqlite3VdbeAddOp3(v, OP_Null, 0, regNew, regNew+pTab->nCol-1);
|
/*sqlite3VdbeAddOp3(v, OP_Null, 0, regNew, regNew+pTab->nCol-1);*/
|
||||||
for(i=0; i<pTab->nCol; i++){
|
for(i=0; i<pTab->nCol; i++){
|
||||||
if( i==pTab->iPKey ){
|
if( i==pTab->iPKey ){
|
||||||
/*sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i);*/
|
sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i);
|
||||||
}else{
|
}else{
|
||||||
j = aXRef[i];
|
j = aXRef[i];
|
||||||
if( j>=0 ){
|
if( j>=0 ){
|
||||||
@@ -513,6 +513,8 @@ void sqlite3Update(
|
|||||||
testcase( i==31 );
|
testcase( i==31 );
|
||||||
testcase( i==32 );
|
testcase( i==32 );
|
||||||
sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, i, regNew+i);
|
sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, i, regNew+i);
|
||||||
|
}else{
|
||||||
|
sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1121,7 +1121,7 @@ case OP_Move: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Opcode: Copy P1 P2 P3 * *
|
/* Opcode: Copy P1 P2 P3 * *
|
||||||
** Synopsis: r[P2@P3]=r[P1@P3]
|
** Synopsis: r[P2@P3+1]=r[P1@P3+1]
|
||||||
**
|
**
|
||||||
** Make a copy of registers P1..P1+P3 into registers P2..P2+P3.
|
** Make a copy of registers P1..P1+P3 into registers P2..P2+P3.
|
||||||
**
|
**
|
||||||
@@ -2464,7 +2464,7 @@ case OP_Column: {
|
|||||||
VdbeMemRelease(pDest);
|
VdbeMemRelease(pDest);
|
||||||
sqlite3VdbeSerialGet(pC->aRow+aOffset[p2], aType[p2], pDest);
|
sqlite3VdbeSerialGet(pC->aRow+aOffset[p2], aType[p2], pDest);
|
||||||
}else{
|
}else{
|
||||||
/* This branch happens only when content is on overflow pages */
|
/* This branch happens only when content is on overflow pages */
|
||||||
t = aType[p2];
|
t = aType[p2];
|
||||||
if( ((pOp->p5 & (OPFLAG_LENGTHARG|OPFLAG_TYPEOFARG))!=0
|
if( ((pOp->p5 & (OPFLAG_LENGTHARG|OPFLAG_TYPEOFARG))!=0
|
||||||
&& ((t>=12 && (t&1)==0) || (pOp->p5 & OPFLAG_TYPEOFARG)!=0))
|
&& ((t>=12 && (t&1)==0) || (pOp->p5 & OPFLAG_TYPEOFARG)!=0))
|
||||||
|
@@ -162,7 +162,7 @@ typedef struct VdbeOpList VdbeOpList;
|
|||||||
** Prototypes for the VDBE interface. See comments on the implementation
|
** Prototypes for the VDBE interface. See comments on the implementation
|
||||||
** for a description of what each of these routines does.
|
** for a description of what each of these routines does.
|
||||||
*/
|
*/
|
||||||
Vdbe *sqlite3VdbeCreate(sqlite3*);
|
Vdbe *sqlite3VdbeCreate(Parse*);
|
||||||
int sqlite3VdbeAddOp0(Vdbe*,int);
|
int sqlite3VdbeAddOp0(Vdbe*,int);
|
||||||
int sqlite3VdbeAddOp1(Vdbe*,int,int);
|
int sqlite3VdbeAddOp1(Vdbe*,int,int);
|
||||||
int sqlite3VdbeAddOp2(Vdbe*,int,int,int);
|
int sqlite3VdbeAddOp2(Vdbe*,int,int,int);
|
||||||
|
@@ -312,12 +312,9 @@ struct Vdbe {
|
|||||||
Mem **apArg; /* Arguments to currently executing user function */
|
Mem **apArg; /* Arguments to currently executing user function */
|
||||||
Mem *aColName; /* Column names to return */
|
Mem *aColName; /* Column names to return */
|
||||||
Mem *pResultSet; /* Pointer to an array of results */
|
Mem *pResultSet; /* Pointer to an array of results */
|
||||||
|
Parse *pParse; /* Parsing context used to create this Vdbe */
|
||||||
int nMem; /* Number of memory locations currently allocated */
|
int nMem; /* Number of memory locations currently allocated */
|
||||||
int nOp; /* Number of instructions in the program */
|
int nOp; /* Number of instructions in the program */
|
||||||
int nOpAlloc; /* Number of slots allocated for aOp[] */
|
|
||||||
int nLabel; /* Number of labels used */
|
|
||||||
int *aLabel; /* Space to hold the labels */
|
|
||||||
u16 nResColumn; /* Number of columns in one row of the result set */
|
|
||||||
int nCursor; /* Number of slots in apCsr[] */
|
int nCursor; /* Number of slots in apCsr[] */
|
||||||
u32 magic; /* Magic number for sanity checking */
|
u32 magic; /* Magic number for sanity checking */
|
||||||
char *zErrMsg; /* Error message written here */
|
char *zErrMsg; /* Error message written here */
|
||||||
@@ -330,6 +327,7 @@ struct Vdbe {
|
|||||||
u32 cacheCtr; /* VdbeCursor row cache generation counter */
|
u32 cacheCtr; /* VdbeCursor row cache generation counter */
|
||||||
int pc; /* The program counter */
|
int pc; /* The program counter */
|
||||||
int rc; /* Value to return */
|
int rc; /* Value to return */
|
||||||
|
u16 nResColumn; /* Number of columns in one row of the result set */
|
||||||
u8 errorAction; /* Recovery action to do in case of an error */
|
u8 errorAction; /* Recovery action to do in case of an error */
|
||||||
u8 minWriteFileFormat; /* Minimum file format for writable database files */
|
u8 minWriteFileFormat; /* Minimum file format for writable database files */
|
||||||
bft explain:2; /* True if EXPLAIN present on SQL command */
|
bft explain:2; /* True if EXPLAIN present on SQL command */
|
||||||
|
@@ -20,7 +20,8 @@
|
|||||||
/*
|
/*
|
||||||
** Create a new virtual database engine.
|
** Create a new virtual database engine.
|
||||||
*/
|
*/
|
||||||
Vdbe *sqlite3VdbeCreate(sqlite3 *db){
|
Vdbe *sqlite3VdbeCreate(Parse *pParse){
|
||||||
|
sqlite3 *db = pParse->db;
|
||||||
Vdbe *p;
|
Vdbe *p;
|
||||||
p = sqlite3DbMallocZero(db, sizeof(Vdbe) );
|
p = sqlite3DbMallocZero(db, sizeof(Vdbe) );
|
||||||
if( p==0 ) return 0;
|
if( p==0 ) return 0;
|
||||||
@@ -32,6 +33,10 @@ Vdbe *sqlite3VdbeCreate(sqlite3 *db){
|
|||||||
p->pPrev = 0;
|
p->pPrev = 0;
|
||||||
db->pVdbe = p;
|
db->pVdbe = p;
|
||||||
p->magic = VDBE_MAGIC_INIT;
|
p->magic = VDBE_MAGIC_INIT;
|
||||||
|
p->pParse = pParse;
|
||||||
|
assert( pParse->aLabel==0 );
|
||||||
|
assert( pParse->nLabel==0 );
|
||||||
|
assert( pParse->nOpAlloc==0 );
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,13 +93,14 @@ void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
|
|||||||
** unchanged (this is so that any opcodes already allocated can be
|
** unchanged (this is so that any opcodes already allocated can be
|
||||||
** correctly deallocated along with the rest of the Vdbe).
|
** correctly deallocated along with the rest of the Vdbe).
|
||||||
*/
|
*/
|
||||||
static int growOpArray(Vdbe *p){
|
static int growOpArray(Vdbe *v){
|
||||||
VdbeOp *pNew;
|
VdbeOp *pNew;
|
||||||
|
Parse *p = v->pParse;
|
||||||
int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op)));
|
int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op)));
|
||||||
pNew = sqlite3DbRealloc(p->db, p->aOp, nNew*sizeof(Op));
|
pNew = sqlite3DbRealloc(p->db, v->aOp, nNew*sizeof(Op));
|
||||||
if( pNew ){
|
if( pNew ){
|
||||||
p->nOpAlloc = sqlite3DbMallocSize(p->db, pNew)/sizeof(Op);
|
p->nOpAlloc = sqlite3DbMallocSize(p->db, pNew)/sizeof(Op);
|
||||||
p->aOp = pNew;
|
v->aOp = pNew;
|
||||||
}
|
}
|
||||||
return (pNew ? SQLITE_OK : SQLITE_NOMEM);
|
return (pNew ? SQLITE_OK : SQLITE_NOMEM);
|
||||||
}
|
}
|
||||||
@@ -133,7 +139,7 @@ int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){
|
|||||||
i = p->nOp;
|
i = p->nOp;
|
||||||
assert( p->magic==VDBE_MAGIC_INIT );
|
assert( p->magic==VDBE_MAGIC_INIT );
|
||||||
assert( op>0 && op<0xff );
|
assert( op>0 && op<0xff );
|
||||||
if( p->nOpAlloc<=i ){
|
if( p->pParse->nOpAlloc<=i ){
|
||||||
if( growOpArray(p) ){
|
if( growOpArray(p) ){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -152,6 +158,15 @@ int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){
|
|||||||
#endif
|
#endif
|
||||||
#ifdef SQLITE_DEBUG
|
#ifdef SQLITE_DEBUG
|
||||||
if( p->db->flags & SQLITE_VdbeAddopTrace ){
|
if( p->db->flags & SQLITE_VdbeAddopTrace ){
|
||||||
|
int jj, kk;
|
||||||
|
Parse *pParse = p->pParse;
|
||||||
|
for(jj=kk=0; jj<SQLITE_N_COLCACHE; jj++){
|
||||||
|
struct yColCache *x = pParse->aColCache + jj;
|
||||||
|
if( x->iLevel>pParse->iCacheLevel || x->iReg==0 ) continue;
|
||||||
|
printf(" r[%d]={%d:%d}", x->iReg, x->iTable, x->iColumn);
|
||||||
|
kk++;
|
||||||
|
}
|
||||||
|
if( kk ) printf("\n");
|
||||||
sqlite3VdbePrintOp(0, i, &p->aOp[i]);
|
sqlite3VdbePrintOp(0, i, &p->aOp[i]);
|
||||||
test_addop_breakpoint();
|
test_addop_breakpoint();
|
||||||
}
|
}
|
||||||
@@ -235,9 +250,10 @@ int sqlite3VdbeAddOp4Int(
|
|||||||
**
|
**
|
||||||
** Zero is returned if a malloc() fails.
|
** Zero is returned if a malloc() fails.
|
||||||
*/
|
*/
|
||||||
int sqlite3VdbeMakeLabel(Vdbe *p){
|
int sqlite3VdbeMakeLabel(Vdbe *v){
|
||||||
|
Parse *p = v->pParse;
|
||||||
int i = p->nLabel++;
|
int i = p->nLabel++;
|
||||||
assert( p->magic==VDBE_MAGIC_INIT );
|
assert( v->magic==VDBE_MAGIC_INIT );
|
||||||
if( (i & (i-1))==0 ){
|
if( (i & (i-1))==0 ){
|
||||||
p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel,
|
p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel,
|
||||||
(i*2+1)*sizeof(p->aLabel[0]));
|
(i*2+1)*sizeof(p->aLabel[0]));
|
||||||
@@ -253,12 +269,13 @@ int sqlite3VdbeMakeLabel(Vdbe *p){
|
|||||||
** be inserted. The parameter "x" must have been obtained from
|
** be inserted. The parameter "x" must have been obtained from
|
||||||
** a prior call to sqlite3VdbeMakeLabel().
|
** a prior call to sqlite3VdbeMakeLabel().
|
||||||
*/
|
*/
|
||||||
void sqlite3VdbeResolveLabel(Vdbe *p, int x){
|
void sqlite3VdbeResolveLabel(Vdbe *v, int x){
|
||||||
|
Parse *p = v->pParse;
|
||||||
int j = -1-x;
|
int j = -1-x;
|
||||||
assert( p->magic==VDBE_MAGIC_INIT );
|
assert( v->magic==VDBE_MAGIC_INIT );
|
||||||
assert( j<p->nLabel );
|
assert( j<p->nLabel );
|
||||||
if( j>=0 && p->aLabel ){
|
if( j>=0 && p->aLabel ){
|
||||||
p->aLabel[j] = p->nOp;
|
p->aLabel[j] = v->nOp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -407,7 +424,8 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
|
|||||||
int i;
|
int i;
|
||||||
int nMaxArgs = *pMaxFuncArgs;
|
int nMaxArgs = *pMaxFuncArgs;
|
||||||
Op *pOp;
|
Op *pOp;
|
||||||
int *aLabel = p->aLabel;
|
Parse *pParse = p->pParse;
|
||||||
|
int *aLabel = pParse->aLabel;
|
||||||
p->readOnly = 1;
|
p->readOnly = 1;
|
||||||
p->bIsReader = 0;
|
p->bIsReader = 0;
|
||||||
for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){
|
for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){
|
||||||
@@ -470,12 +488,13 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
|
|||||||
|
|
||||||
pOp->opflags = sqlite3OpcodeProperty[opcode];
|
pOp->opflags = sqlite3OpcodeProperty[opcode];
|
||||||
if( (pOp->opflags & OPFLG_JUMP)!=0 && pOp->p2<0 ){
|
if( (pOp->opflags & OPFLG_JUMP)!=0 && pOp->p2<0 ){
|
||||||
assert( -1-pOp->p2<p->nLabel );
|
assert( -1-pOp->p2<pParse->nLabel );
|
||||||
pOp->p2 = aLabel[-1-pOp->p2];
|
pOp->p2 = aLabel[-1-pOp->p2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sqlite3DbFree(p->db, p->aLabel);
|
sqlite3DbFree(p->db, pParse->aLabel);
|
||||||
p->aLabel = 0;
|
pParse->aLabel = 0;
|
||||||
|
pParse->nLabel = 0;
|
||||||
*pMaxFuncArgs = nMaxArgs;
|
*pMaxFuncArgs = nMaxArgs;
|
||||||
assert( p->bIsReader!=0 || p->btreeMask==0 );
|
assert( p->bIsReader!=0 || p->btreeMask==0 );
|
||||||
}
|
}
|
||||||
@@ -519,7 +538,7 @@ VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *pnMaxArg){
|
|||||||
int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){
|
int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){
|
||||||
int addr;
|
int addr;
|
||||||
assert( p->magic==VDBE_MAGIC_INIT );
|
assert( p->magic==VDBE_MAGIC_INIT );
|
||||||
if( p->nOp + nOp > p->nOpAlloc && growOpArray(p) ){
|
if( p->nOp + nOp > p->pParse->nOpAlloc && growOpArray(p) ){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
addr = p->nOp;
|
addr = p->nOp;
|
||||||
@@ -873,7 +892,17 @@ static int translateP(char c, const Op *pOp){
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Compute a string for the "comment" field of a VDBE opcode listing
|
** Compute a string for the "comment" field of a VDBE opcode listing.
|
||||||
|
**
|
||||||
|
** The Synopsis: field in comments in the vdbe.c source file gets converted
|
||||||
|
** to an extra string that is appended to the sqlite3OpcodeName(). In the
|
||||||
|
** absence of other comments, this synopsis becomes the comment on the opcode.
|
||||||
|
** Some translation occurs:
|
||||||
|
**
|
||||||
|
** "PX" -> "r[X]"
|
||||||
|
** "PX@PY" -> "r[X..X+Y-1]" or "r[x]" if y is 0 or 1
|
||||||
|
** "PX@PY+1" -> "r[X..X+Y]" or "r[x]" if y is 0
|
||||||
|
** "PY..PY" -> "r[X..Y]" or "r[x]" if y<=x
|
||||||
*/
|
*/
|
||||||
static int displayComment(
|
static int displayComment(
|
||||||
const Op *pOp, /* The opcode to be commented */
|
const Op *pOp, /* The opcode to be commented */
|
||||||
@@ -907,7 +936,13 @@ static int displayComment(
|
|||||||
ii += 3;
|
ii += 3;
|
||||||
jj += sqlite3Strlen30(zTemp+jj);
|
jj += sqlite3Strlen30(zTemp+jj);
|
||||||
v2 = translateP(zSynopsis[ii], pOp);
|
v2 = translateP(zSynopsis[ii], pOp);
|
||||||
if( v2>1 ) sqlite3_snprintf(nTemp-jj, zTemp+jj, "..%d", v1+v2-1);
|
if( strncmp(zSynopsis+ii+1,"+1",2)==0 ){
|
||||||
|
ii += 2;
|
||||||
|
v2++;
|
||||||
|
}
|
||||||
|
if( v2>1 ){
|
||||||
|
sqlite3_snprintf(nTemp-jj, zTemp+jj, "..%d", v1+v2-1);
|
||||||
|
}
|
||||||
}else if( strncmp(zSynopsis+ii+1, "..P3", 4)==0 && pOp->p3==0 ){
|
}else if( strncmp(zSynopsis+ii+1, "..P3", 4)==0 && pOp->p3==0 ){
|
||||||
ii += 4;
|
ii += 4;
|
||||||
}
|
}
|
||||||
@@ -1139,6 +1174,9 @@ void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){
|
|||||||
#else
|
#else
|
||||||
zCom[0] = 0
|
zCom[0] = 0
|
||||||
#endif
|
#endif
|
||||||
|
/* NB: The sqlite3OpcodeName() function is implemented by code created
|
||||||
|
** by the mkopcodeh.awk and mkopcodec.awk scripts which extract the
|
||||||
|
** information from the vdbe.c source text */
|
||||||
fprintf(pOut, zFormat1, pc,
|
fprintf(pOut, zFormat1, pc,
|
||||||
sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, pOp->p3, zP4, pOp->p5,
|
sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, pOp->p3, zP4, pOp->p5,
|
||||||
zCom
|
zCom
|
||||||
@@ -1570,6 +1608,7 @@ void sqlite3VdbeMakeReady(
|
|||||||
assert( p->nOp>0 );
|
assert( p->nOp>0 );
|
||||||
assert( pParse!=0 );
|
assert( pParse!=0 );
|
||||||
assert( p->magic==VDBE_MAGIC_INIT );
|
assert( p->magic==VDBE_MAGIC_INIT );
|
||||||
|
assert( pParse==p->pParse );
|
||||||
db = p->db;
|
db = p->db;
|
||||||
assert( db->mallocFailed==0 );
|
assert( db->mallocFailed==0 );
|
||||||
nVar = pParse->nVar;
|
nVar = pParse->nVar;
|
||||||
@@ -1593,8 +1632,8 @@ void sqlite3VdbeMakeReady(
|
|||||||
/* Allocate space for memory registers, SQL variables, VDBE cursors and
|
/* Allocate space for memory registers, SQL variables, VDBE cursors and
|
||||||
** an array to marshal SQL function arguments in.
|
** an array to marshal SQL function arguments in.
|
||||||
*/
|
*/
|
||||||
zCsr = (u8*)&p->aOp[p->nOp]; /* Memory avaliable for allocation */
|
zCsr = (u8*)&p->aOp[p->nOp]; /* Memory avaliable for allocation */
|
||||||
zEnd = (u8*)&p->aOp[p->nOpAlloc]; /* First byte past end of zCsr[] */
|
zEnd = (u8*)&p->aOp[pParse->nOpAlloc]; /* First byte past end of zCsr[] */
|
||||||
|
|
||||||
resolveP2Values(p, &nArg);
|
resolveP2Values(p, &nArg);
|
||||||
p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort);
|
p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort);
|
||||||
@@ -2597,7 +2636,6 @@ void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
|
|||||||
}
|
}
|
||||||
for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]);
|
for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]);
|
||||||
vdbeFreeOpArray(db, p->aOp, p->nOp);
|
vdbeFreeOpArray(db, p->aOp, p->nOp);
|
||||||
sqlite3DbFree(db, p->aLabel);
|
|
||||||
sqlite3DbFree(db, p->aColName);
|
sqlite3DbFree(db, p->aColName);
|
||||||
sqlite3DbFree(db, p->zSql);
|
sqlite3DbFree(db, p->zSql);
|
||||||
sqlite3DbFree(db, p->pFree);
|
sqlite3DbFree(db, p->pFree);
|
||||||
|
@@ -259,7 +259,7 @@ int sqlite3_blob_open(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(db);
|
pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(pParse);
|
||||||
assert( pBlob->pStmt || db->mallocFailed );
|
assert( pBlob->pStmt || db->mallocFailed );
|
||||||
if( pBlob->pStmt ){
|
if( pBlob->pStmt ){
|
||||||
Vdbe *v = (Vdbe *)pBlob->pStmt;
|
Vdbe *v = (Vdbe *)pBlob->pStmt;
|
||||||
|
@@ -125,9 +125,9 @@ char *sqlite3VdbeExpandSql(
|
|||||||
if( pVar->flags & MEM_Null ){
|
if( pVar->flags & MEM_Null ){
|
||||||
sqlite3StrAccumAppend(&out, "NULL", 4);
|
sqlite3StrAccumAppend(&out, "NULL", 4);
|
||||||
}else if( pVar->flags & MEM_Int ){
|
}else if( pVar->flags & MEM_Int ){
|
||||||
sqlite3XPrintf(&out, "%lld", pVar->u.i);
|
sqlite3XPrintf(&out, 0, "%lld", pVar->u.i);
|
||||||
}else if( pVar->flags & MEM_Real ){
|
}else if( pVar->flags & MEM_Real ){
|
||||||
sqlite3XPrintf(&out, "%!.15g", pVar->r);
|
sqlite3XPrintf(&out, 0, "%!.15g", pVar->r);
|
||||||
}else if( pVar->flags & MEM_Str ){
|
}else if( pVar->flags & MEM_Str ){
|
||||||
int nOut; /* Number of bytes of the string text to include in output */
|
int nOut; /* Number of bytes of the string text to include in output */
|
||||||
#ifndef SQLITE_OMIT_UTF16
|
#ifndef SQLITE_OMIT_UTF16
|
||||||
@@ -148,15 +148,17 @@ char *sqlite3VdbeExpandSql(
|
|||||||
while( nOut<pVar->n && (pVar->z[nOut]&0xc0)==0x80 ){ nOut++; }
|
while( nOut<pVar->n && (pVar->z[nOut]&0xc0)==0x80 ){ nOut++; }
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
sqlite3XPrintf(&out, "'%.*q'", nOut, pVar->z);
|
sqlite3XPrintf(&out, 0, "'%.*q'", nOut, pVar->z);
|
||||||
#ifdef SQLITE_TRACE_SIZE_LIMIT
|
#ifdef SQLITE_TRACE_SIZE_LIMIT
|
||||||
if( nOut<pVar->n ) sqlite3XPrintf(&out, "/*+%d bytes*/", pVar->n-nOut);
|
if( nOut<pVar->n ){
|
||||||
|
sqlite3XPrintf(&out, 0, "/*+%d bytes*/", pVar->n-nOut);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifndef SQLITE_OMIT_UTF16
|
#ifndef SQLITE_OMIT_UTF16
|
||||||
if( enc!=SQLITE_UTF8 ) sqlite3VdbeMemRelease(&utf8);
|
if( enc!=SQLITE_UTF8 ) sqlite3VdbeMemRelease(&utf8);
|
||||||
#endif
|
#endif
|
||||||
}else if( pVar->flags & MEM_Zero ){
|
}else if( pVar->flags & MEM_Zero ){
|
||||||
sqlite3XPrintf(&out, "zeroblob(%d)", pVar->u.nZero);
|
sqlite3XPrintf(&out, 0, "zeroblob(%d)", pVar->u.nZero);
|
||||||
}else{
|
}else{
|
||||||
int nOut; /* Number of bytes of the blob to include in output */
|
int nOut; /* Number of bytes of the blob to include in output */
|
||||||
assert( pVar->flags & MEM_Blob );
|
assert( pVar->flags & MEM_Blob );
|
||||||
@@ -166,11 +168,13 @@ char *sqlite3VdbeExpandSql(
|
|||||||
if( nOut>SQLITE_TRACE_SIZE_LIMIT ) nOut = SQLITE_TRACE_SIZE_LIMIT;
|
if( nOut>SQLITE_TRACE_SIZE_LIMIT ) nOut = SQLITE_TRACE_SIZE_LIMIT;
|
||||||
#endif
|
#endif
|
||||||
for(i=0; i<nOut; i++){
|
for(i=0; i<nOut; i++){
|
||||||
sqlite3XPrintf(&out, "%02x", pVar->z[i]&0xff);
|
sqlite3XPrintf(&out, 0, "%02x", pVar->z[i]&0xff);
|
||||||
}
|
}
|
||||||
sqlite3StrAccumAppend(&out, "'", 1);
|
sqlite3StrAccumAppend(&out, "'", 1);
|
||||||
#ifdef SQLITE_TRACE_SIZE_LIMIT
|
#ifdef SQLITE_TRACE_SIZE_LIMIT
|
||||||
if( nOut<pVar->n ) sqlite3XPrintf(&out, "/*+%d bytes*/", pVar->n-nOut);
|
if( nOut<pVar->n ){
|
||||||
|
sqlite3XPrintf(&out, 0, "/*+%d bytes*/", pVar->n-nOut);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -229,7 +233,7 @@ void sqlite3ExplainPrintf(Vdbe *pVdbe, const char *zFormat, ...){
|
|||||||
sqlite3AppendSpace(&p->str, p->aIndent[n-1]);
|
sqlite3AppendSpace(&p->str, p->aIndent[n-1]);
|
||||||
}
|
}
|
||||||
va_start(ap, zFormat);
|
va_start(ap, zFormat);
|
||||||
sqlite3VXPrintf(&p->str, 1, zFormat, ap);
|
sqlite3VXPrintf(&p->str, SQLITE_PRINTF_INTERNAL, zFormat, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3928,6 +3928,7 @@ static int whereLoopAddBtreeIndex(
|
|||||||
&& saved_nEq==saved_nSkip
|
&& saved_nEq==saved_nSkip
|
||||||
&& saved_nEq+1<pProbe->nKeyCol
|
&& saved_nEq+1<pProbe->nKeyCol
|
||||||
&& pProbe->aiRowEst[saved_nEq+1]>=18 /* TUNING: Minimum for skip-scan */
|
&& pProbe->aiRowEst[saved_nEq+1]>=18 /* TUNING: Minimum for skip-scan */
|
||||||
|
&& (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK
|
||||||
){
|
){
|
||||||
LogEst nIter;
|
LogEst nIter;
|
||||||
pNew->u.btree.nEq++;
|
pNew->u.btree.nEq++;
|
||||||
|
@@ -322,7 +322,6 @@ do_test attach3-12.9 {
|
|||||||
db_list
|
db_list
|
||||||
} {main temp {}}
|
} {main temp {}}
|
||||||
do_test attach3-12.10 {
|
do_test attach3-12.10 {
|
||||||
breakpoint
|
|
||||||
execsql {
|
execsql {
|
||||||
DETACH ?
|
DETACH ?
|
||||||
}
|
}
|
||||||
|
@@ -1191,7 +1191,6 @@ do_test capi3-18.2 {
|
|||||||
sqlite3_reset $STMT
|
sqlite3_reset $STMT
|
||||||
sqlite3_errcode db
|
sqlite3_errcode db
|
||||||
} {SQLITE_SCHEMA}
|
} {SQLITE_SCHEMA}
|
||||||
breakpoint
|
|
||||||
do_test capi3-18.3 {
|
do_test capi3-18.3 {
|
||||||
sqlite3_errmsg db
|
sqlite3_errmsg db
|
||||||
} {database schema has changed}
|
} {database schema has changed}
|
||||||
|
@@ -75,7 +75,6 @@ do_test collate1-1.1 {
|
|||||||
}
|
}
|
||||||
} {{} 0x119 0x2D}
|
} {{} 0x119 0x2D}
|
||||||
do_test collate1-1.2 {
|
do_test collate1-1.2 {
|
||||||
breakpoint
|
|
||||||
execsql {
|
execsql {
|
||||||
SELECT c2 FROM collate1t1 ORDER BY 1 COLLATE hex;
|
SELECT c2 FROM collate1t1 ORDER BY 1 COLLATE hex;
|
||||||
}
|
}
|
||||||
|
@@ -301,7 +301,6 @@ do_test exclusive2-3.3 {
|
|||||||
readPagerChangeCounter test.db
|
readPagerChangeCounter test.db
|
||||||
} {4}
|
} {4}
|
||||||
do_test exclusive2-3.4 {
|
do_test exclusive2-3.4 {
|
||||||
breakpoint
|
|
||||||
execsql {
|
execsql {
|
||||||
INSERT INTO t1 VALUES(randstr(200, 200));
|
INSERT INTO t1 VALUES(randstr(200, 200));
|
||||||
}
|
}
|
||||||
|
@@ -146,7 +146,6 @@ do_test fts3aa-3.3 {
|
|||||||
execsql {SELECT rowid FROM t1 WHERE content MATCH '-two one'}
|
execsql {SELECT rowid FROM t1 WHERE content MATCH '-two one'}
|
||||||
} {1 5 9 13 17 21 25 29}
|
} {1 5 9 13 17 21 25 29}
|
||||||
|
|
||||||
breakpoint
|
|
||||||
do_test fts3aa-4.1 {
|
do_test fts3aa-4.1 {
|
||||||
execsql {SELECT rowid FROM t1 WHERE content MATCH 'one OR two'}
|
execsql {SELECT rowid FROM t1 WHERE content MATCH 'one OR two'}
|
||||||
} {1 2 3 5 6 7 9 10 11 13 14 15 17 18 19 21 22 23 25 26 27 29 30 31}
|
} {1 2 3 5 6 7 9 10 11 13 14 15 17 18 19 21 22 23 25 26 27 29 30 31}
|
||||||
|
@@ -115,7 +115,6 @@ for {set i 1} {$i<=15} {incr i} {
|
|||||||
db eval "INSERT INTO t4(norm,plusone,invert) VALUES([join $vset ,]);"
|
db eval "INSERT INTO t4(norm,plusone,invert) VALUES([join $vset ,]);"
|
||||||
}
|
}
|
||||||
|
|
||||||
breakpoint
|
|
||||||
do_test fts3ab-4.1 {
|
do_test fts3ab-4.1 {
|
||||||
execsql {SELECT rowid FROM t4 WHERE t4 MATCH 'norm:one'}
|
execsql {SELECT rowid FROM t4 WHERE t4 MATCH 'norm:one'}
|
||||||
} {1 3 5 7 9 11 13 15}
|
} {1 3 5 7 9 11 13 15}
|
||||||
|
@@ -78,7 +78,6 @@ do_test fts3ag-1.10 {
|
|||||||
# Test that docListOrMerge() correctly handles reaching the end of one
|
# Test that docListOrMerge() correctly handles reaching the end of one
|
||||||
# doclist before it reaches the end of the other.
|
# doclist before it reaches the end of the other.
|
||||||
do_test fts3ag-1.11 {
|
do_test fts3ag-1.11 {
|
||||||
breakpoint
|
|
||||||
execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this OR also'}
|
execsql {SELECT rowid FROM t1 WHERE t1 MATCH 'this OR also'}
|
||||||
} {1 2}
|
} {1 2}
|
||||||
do_test fts3ag-1.12 {
|
do_test fts3ag-1.12 {
|
||||||
|
@@ -253,7 +253,6 @@ check_doclist fts3d-4.4.10 1 0 was {[2 0[1]]}
|
|||||||
|
|
||||||
# Optimize should leave the result in the level of the highest-level
|
# Optimize should leave the result in the level of the highest-level
|
||||||
# prior segment.
|
# prior segment.
|
||||||
breakpoint
|
|
||||||
do_test fts3d-4.5 {
|
do_test fts3d-4.5 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT OPTIMIZE(t1) FROM t1 LIMIT 1;
|
SELECT OPTIMIZE(t1) FROM t1 LIMIT 1;
|
||||||
|
@@ -165,7 +165,6 @@ do_test fts3near-3.6 {
|
|||||||
SELECT offsets(t1) FROM t1 WHERE content MATCH 'three NEAR/0 "two four"'
|
SELECT offsets(t1) FROM t1 WHERE content MATCH 'three NEAR/0 "two four"'
|
||||||
}
|
}
|
||||||
} {{0 0 8 5 0 1 14 3 0 2 18 4}}
|
} {{0 0 8 5 0 1 14 3 0 2 18 4}}
|
||||||
breakpoint
|
|
||||||
do_test fts3near-3.7 {
|
do_test fts3near-3.7 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT offsets(t1) FROM t1 WHERE content MATCH '"two four" NEAR/0 three'}
|
SELECT offsets(t1) FROM t1 WHERE content MATCH '"two four" NEAR/0 three'}
|
||||||
|
@@ -90,7 +90,6 @@ do_execsql_test 1.13.1 {
|
|||||||
INSERT INTO c1(x) VALUES('a b c');
|
INSERT INTO c1(x) VALUES('a b c');
|
||||||
INSERT INTO c1(x) VALUES('d e f');
|
INSERT INTO c1(x) VALUES('d e f');
|
||||||
}
|
}
|
||||||
breakpoint
|
|
||||||
do_execsql_test 1.13.2 {
|
do_execsql_test 1.13.2 {
|
||||||
SELECT * FROM c1, t1 WHERE input = x AND c1.rowid=t1.rowid;
|
SELECT * FROM c1, t1 WHERE input = x AND c1.rowid=t1.rowid;
|
||||||
} {
|
} {
|
||||||
|
@@ -392,7 +392,6 @@ foreach T $tokenizers {
|
|||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
# Test that the private use ranges are treated as alphanumeric.
|
# Test that the private use ranges are treated as alphanumeric.
|
||||||
#
|
#
|
||||||
breakpoint
|
|
||||||
foreach {tn1 c} {
|
foreach {tn1 c} {
|
||||||
1 \ue000 2 \ue001 3 \uf000 4 \uf8fe 5 \uf8ff
|
1 \ue000 2 \ue001 3 \uf000 4 \uf8fe 5 \uf8ff
|
||||||
} {
|
} {
|
||||||
@@ -557,7 +556,3 @@ do_execsql_test 11.1 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -41,7 +41,6 @@ do_test 1-pre {
|
|||||||
do_faultsim_test 1 -prep {
|
do_faultsim_test 1 -prep {
|
||||||
faultsim_restore_and_reopen
|
faultsim_restore_and_reopen
|
||||||
db func a_string a_string
|
db func a_string a_string
|
||||||
breakpoint
|
|
||||||
execsql {
|
execsql {
|
||||||
PRAGMA mmap_size = 1000000;
|
PRAGMA mmap_size = 1000000;
|
||||||
PRAGMA cache_size = 5;
|
PRAGMA cache_size = 5;
|
||||||
|
99
test/printf2.test
Normal file
99
test/printf2.test
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
# 2013-12-17
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
#***********************************************************************
|
||||||
|
# This file implements regression tests for SQLite library. The
|
||||||
|
# focus of this file is testing the printf() SQL function.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# EVIDENCE-OF: R-63057-40065 The printf(FORMAT,...) SQL function works
|
||||||
|
# like the sqlite3_mprintf() C-language function and the printf()
|
||||||
|
# function from the standard C library.
|
||||||
|
#
|
||||||
|
|
||||||
|
set testdir [file dirname $argv0]
|
||||||
|
source $testdir/tester.tcl
|
||||||
|
|
||||||
|
# EVIDENCE-OF: R-40086-60101 If the FORMAT argument is missing or NULL
|
||||||
|
# then the result is NULL.
|
||||||
|
#
|
||||||
|
do_execsql_test printf2-1.1 {
|
||||||
|
SELECT quote(printf()), quote(printf(NULL,1,2,3));
|
||||||
|
} {NULL NULL}
|
||||||
|
|
||||||
|
|
||||||
|
do_execsql_test printf2-1.2 {
|
||||||
|
SELECT printf('hello');
|
||||||
|
} {hello}
|
||||||
|
do_execsql_test printf2-1.3 {
|
||||||
|
SELECT printf('%d,%d,%d',55,-11,3421);
|
||||||
|
} {55,-11,3421}
|
||||||
|
do_execsql_test printf2-1.4 {
|
||||||
|
SELECT printf('%d,%d,%d',55,'-11',3421);
|
||||||
|
} {55,-11,3421}
|
||||||
|
do_execsql_test printf2-1.5 {
|
||||||
|
SELECT printf('%d,%d,%d,%d',55,'-11',3421);
|
||||||
|
} {55,-11,3421,0}
|
||||||
|
do_execsql_test printf2-1.6 {
|
||||||
|
SELECT printf('%.2f',3.141592653);
|
||||||
|
} {3.14}
|
||||||
|
do_execsql_test printf2-1.7 {
|
||||||
|
SELECT printf('%.*f',2,3.141592653);
|
||||||
|
} {3.14}
|
||||||
|
do_execsql_test printf2-1.8 {
|
||||||
|
SELECT printf('%*.*f',5,2,3.141592653);
|
||||||
|
} {{ 3.14}}
|
||||||
|
do_execsql_test printf2-1.9 {
|
||||||
|
SELECT printf('%d',314159.2653);
|
||||||
|
} {314159}
|
||||||
|
do_execsql_test printf2-1.10 {
|
||||||
|
SELECT printf('%lld',314159.2653);
|
||||||
|
} {314159}
|
||||||
|
do_execsql_test printf2-1.11 {
|
||||||
|
SELECT printf('%lld%n',314159.2653,'hi');
|
||||||
|
} {314159}
|
||||||
|
|
||||||
|
# EVIDENCE-OF: R-20555-31089 The %z format is interchangable with %s.
|
||||||
|
#
|
||||||
|
do_execsql_test printf2-1.12 {
|
||||||
|
SELECT printf('%.*z',5,'abcdefghijklmnop');
|
||||||
|
} {abcde}
|
||||||
|
do_execsql_test printf2-1.13 {
|
||||||
|
SELECT printf('%c','abcdefghijklmnop');
|
||||||
|
} {a}
|
||||||
|
|
||||||
|
# EVIDENCE-OF: R-02347-27622 The %n format is silently ignored and does
|
||||||
|
# not consume an argument.
|
||||||
|
#
|
||||||
|
do_execsql_test printf2-2.1 {
|
||||||
|
CREATE TABLE t1(a,b,c);
|
||||||
|
INSERT INTO t1 VALUES(1,2,3);
|
||||||
|
INSERT INTO t1 VALUES(-1,-2,-3);
|
||||||
|
INSERT INTO t1 VALUES('abc','def','ghi');
|
||||||
|
INSERT INTO t1 VALUES(1.5,2.25,3.125);
|
||||||
|
SELECT printf('(%s)-%n-(%s)',a,b,c) FROM t1 ORDER BY rowid;
|
||||||
|
} {(1)--(2) (-1)--(-2) (abc)--(def) (1.5)--(2.25)}
|
||||||
|
|
||||||
|
# EVIDENCE-OF: R-56064-04001 The %p format is an alias for %X.
|
||||||
|
#
|
||||||
|
do_execsql_test printf2-2.2 {
|
||||||
|
SELECT printf('%s=(%p)',a,a) FROM t1 ORDER BY a;
|
||||||
|
} {-1=(FFFFFFFFFFFFFFFF) 1=(1) 1.5=(1) abc=(0)}
|
||||||
|
|
||||||
|
# EVIDENCE-OF: R-29410-53018 If there are too few arguments in the
|
||||||
|
# argument list, missing arguments are assumed to have a NULL value,
|
||||||
|
# which is translated into 0 or 0.0 for numeric formats or an empty
|
||||||
|
# string for %s.
|
||||||
|
#
|
||||||
|
do_execsql_test printf2-2.3 {
|
||||||
|
SELECT printf('%s=(%d/%g/%s)',a) FROM t1 ORDER BY a;
|
||||||
|
} {-1=(0/0/) 1=(0/0/) 1.5=(0/0/) abc=(0/0/)}
|
||||||
|
|
||||||
|
|
||||||
|
finish_test
|
@@ -47,7 +47,6 @@ do_test securedel-1.3 {
|
|||||||
}
|
}
|
||||||
} {0 0}
|
} {0 0}
|
||||||
do_test securedel-1.4 {
|
do_test securedel-1.4 {
|
||||||
breakpoint
|
|
||||||
db eval {
|
db eval {
|
||||||
PRAGMA secure_delete=ON;
|
PRAGMA secure_delete=ON;
|
||||||
PRAGMA db2.secure_delete;
|
PRAGMA db2.secure_delete;
|
||||||
|
@@ -155,7 +155,8 @@ SELECT * FROM foo1;
|
|||||||
2
|
2
|
||||||
SELECT * FROM foo2;
|
SELECT * FROM foo2;
|
||||||
1
|
1
|
||||||
2}}
|
2
|
||||||
|
}}
|
||||||
|
|
||||||
# Test with echo on and headers on using dot command and
|
# Test with echo on and headers on using dot command and
|
||||||
# multiple commands per line.
|
# multiple commands per line.
|
||||||
@@ -192,6 +193,7 @@ a
|
|||||||
SELECT * FROM foo2;
|
SELECT * FROM foo2;
|
||||||
b
|
b
|
||||||
1
|
1
|
||||||
2}}
|
2
|
||||||
|
}}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
@@ -187,4 +187,26 @@ do_execsql_test skipscan1-3.2sort {
|
|||||||
SELECT a,b,c,d,'|' FROM t3 WHERE b=345 ORDER BY a;
|
SELECT a,b,c,d,'|' FROM t3 WHERE b=345 ORDER BY a;
|
||||||
} {~/*ORDER BY*/}
|
} {~/*ORDER BY*/}
|
||||||
|
|
||||||
|
# Ticket 520070ec7fbaac: Array overrun in the skip-scan optimization
|
||||||
|
# 2013-12-22
|
||||||
|
#
|
||||||
|
do_execsql_test skipscan1-4.1 {
|
||||||
|
CREATE TABLE t4(a,b,c,d,e,f,g,h,i);
|
||||||
|
CREATE INDEX t4all ON t4(a,b,c,d,e,f,g,h);
|
||||||
|
INSERT INTO t4 VALUES(1,2,3,4,5,6,7,8,9);
|
||||||
|
ANALYZE;
|
||||||
|
DELETE FROM sqlite_stat1;
|
||||||
|
INSERT INTO sqlite_stat1
|
||||||
|
VALUES('t4','t4all','655360 163840 40960 10240 2560 640 160 40 10');
|
||||||
|
ANALYZE sqlite_master;
|
||||||
|
SELECT i FROM t4 WHERE a=1;
|
||||||
|
SELECT i FROM t4 WHERE b=2;
|
||||||
|
SELECT i FROM t4 WHERE c=3;
|
||||||
|
SELECT i FROM t4 WHERE d=4;
|
||||||
|
SELECT i FROM t4 WHERE e=5;
|
||||||
|
SELECT i FROM t4 WHERE f=6;
|
||||||
|
SELECT i FROM t4 WHERE g=7;
|
||||||
|
SELECT i FROM t4 WHERE h=8;
|
||||||
|
} {9 9 9 9 9 9 9 9}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
@@ -9,6 +9,7 @@ static const char zHelp[] =
|
|||||||
" --autovacuum Enable AUTOVACUUM mode\n"
|
" --autovacuum Enable AUTOVACUUM mode\n"
|
||||||
" --cachesize N Set the cache size to N\n"
|
" --cachesize N Set the cache size to N\n"
|
||||||
" --exclusive Enable locking_mode=EXCLUSIVE\n"
|
" --exclusive Enable locking_mode=EXCLUSIVE\n"
|
||||||
|
" --explain Like --sqlonly but with added EXPLAIN keywords\n"
|
||||||
" --heap SZ MIN Memory allocator uses SZ bytes & min allocation MIN\n"
|
" --heap SZ MIN Memory allocator uses SZ bytes & min allocation MIN\n"
|
||||||
" --incrvacuum Enable incremenatal vacuum mode\n"
|
" --incrvacuum Enable incremenatal vacuum mode\n"
|
||||||
" --journalmode M Set the journal_mode to MODE\n"
|
" --journalmode M Set the journal_mode to MODE\n"
|
||||||
@@ -49,6 +50,7 @@ static struct Global {
|
|||||||
int bWithoutRowid; /* True for --without-rowid */
|
int bWithoutRowid; /* True for --without-rowid */
|
||||||
int bReprepare; /* True to reprepare the SQL on each rerun */
|
int bReprepare; /* True to reprepare the SQL on each rerun */
|
||||||
int bSqlOnly; /* True to print the SQL once only */
|
int bSqlOnly; /* True to print the SQL once only */
|
||||||
|
int bExplain; /* Print SQL with EXPLAIN prefix */
|
||||||
int szTest; /* Scale factor for test iterations */
|
int szTest; /* Scale factor for test iterations */
|
||||||
const char *zWR; /* Might be WITHOUT ROWID */
|
const char *zWR; /* Might be WITHOUT ROWID */
|
||||||
const char *zNN; /* Might be NOT NULL */
|
const char *zNN; /* Might be NOT NULL */
|
||||||
@@ -290,6 +292,24 @@ void speedtest1_final(void){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Print an SQL statement to standard output */
|
||||||
|
static void printSql(const char *zSql){
|
||||||
|
int n = (int)strlen(zSql);
|
||||||
|
while( n>0 && (zSql[n-1]==';' || isspace(zSql[n-1])) ){ n--; }
|
||||||
|
if( g.bExplain ) printf("EXPLAIN ");
|
||||||
|
printf("%.*s;\n", n, zSql);
|
||||||
|
if( g.bExplain
|
||||||
|
#if SQLITE_VERSION_NUMBER>=3007010
|
||||||
|
&& ( sqlite3_strglob("CREATE *", zSql)==0
|
||||||
|
|| sqlite3_strglob("DROP *", zSql)==0
|
||||||
|
|| sqlite3_strglob("ALTER *", zSql)==0
|
||||||
|
)
|
||||||
|
#endif
|
||||||
|
){
|
||||||
|
printf("%.*s;\n", n, zSql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Run SQL */
|
/* Run SQL */
|
||||||
void speedtest1_exec(const char *zFormat, ...){
|
void speedtest1_exec(const char *zFormat, ...){
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@@ -298,9 +318,7 @@ void speedtest1_exec(const char *zFormat, ...){
|
|||||||
zSql = sqlite3_vmprintf(zFormat, ap);
|
zSql = sqlite3_vmprintf(zFormat, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
if( g.bSqlOnly ){
|
if( g.bSqlOnly ){
|
||||||
int n = (int)strlen(zSql);
|
printSql(zSql);
|
||||||
while( n>0 && (zSql[n-1]==';' || isspace(zSql[n-1])) ){ n--; }
|
|
||||||
printf("%.*s;\n", n, zSql);
|
|
||||||
}else{
|
}else{
|
||||||
char *zErrMsg = 0;
|
char *zErrMsg = 0;
|
||||||
int rc = sqlite3_exec(g.db, zSql, 0, 0, &zErrMsg);
|
int rc = sqlite3_exec(g.db, zSql, 0, 0, &zErrMsg);
|
||||||
@@ -318,9 +336,7 @@ void speedtest1_prepare(const char *zFormat, ...){
|
|||||||
zSql = sqlite3_vmprintf(zFormat, ap);
|
zSql = sqlite3_vmprintf(zFormat, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
if( g.bSqlOnly ){
|
if( g.bSqlOnly ){
|
||||||
int n = (int)strlen(zSql);
|
printSql(zSql);
|
||||||
while( n>0 && (zSql[n-1]==';' || isspace(zSql[n-1])) ){ n--; }
|
|
||||||
printf("%.*s;\n", n, zSql);
|
|
||||||
}else{
|
}else{
|
||||||
int rc;
|
int rc;
|
||||||
if( g.pStmt ) sqlite3_finalize(g.pStmt);
|
if( g.pStmt ) sqlite3_finalize(g.pStmt);
|
||||||
@@ -378,6 +394,19 @@ static void randomFunc(
|
|||||||
sqlite3_result_int64(context, (sqlite3_int64)speedtest1_random());
|
sqlite3_result_int64(context, (sqlite3_int64)speedtest1_random());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Estimate the square root of an integer */
|
||||||
|
static int est_square_root(int x){
|
||||||
|
int y0 = x/2;
|
||||||
|
int y1;
|
||||||
|
int n;
|
||||||
|
for(n=0; y0>0 && n<10; n++){
|
||||||
|
y1 = (y0 + x/y0)/2;
|
||||||
|
if( y1==y0 ) break;
|
||||||
|
y0 = y1;
|
||||||
|
}
|
||||||
|
return y0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** The main and default testset
|
** The main and default testset
|
||||||
*/
|
*/
|
||||||
@@ -484,15 +513,13 @@ void testset_main(void){
|
|||||||
|
|
||||||
|
|
||||||
speedtest1_begin_test(150, "CREATE INDEX five times");
|
speedtest1_begin_test(150, "CREATE INDEX five times");
|
||||||
speedtest1_exec(
|
speedtest1_exec("BEGIN;");
|
||||||
"BEGIN;\n"
|
speedtest1_exec("CREATE UNIQUE INDEX t1b ON t1(b);");
|
||||||
"CREATE UNIQUE INDEX t1b ON t1(b);\n"
|
speedtest1_exec("CREATE INDEX t1c ON t1(c);");
|
||||||
"CREATE INDEX t1c ON t1(c);\n"
|
speedtest1_exec("CREATE UNIQUE INDEX t2b ON t2(b);");
|
||||||
"CREATE UNIQUE INDEX t2b ON t2(b);\n"
|
speedtest1_exec("CREATE INDEX t2c ON t2(c DESC);");
|
||||||
"CREATE INDEX t2c ON t2(c DESC);\n"
|
speedtest1_exec("CREATE INDEX t3bc ON t3(b,c);");
|
||||||
"CREATE INDEX t3bc ON t3(b,c);\n"
|
speedtest1_exec("COMMIT;");
|
||||||
"COMMIT;\n"
|
|
||||||
);
|
|
||||||
speedtest1_end_test();
|
speedtest1_end_test();
|
||||||
|
|
||||||
|
|
||||||
@@ -566,10 +593,8 @@ void testset_main(void){
|
|||||||
|
|
||||||
n = sz;
|
n = sz;
|
||||||
speedtest1_begin_test(190, "DELETE and REFILL one table", n);
|
speedtest1_begin_test(190, "DELETE and REFILL one table", n);
|
||||||
speedtest1_exec(
|
speedtest1_exec("DELETE FROM t2;");
|
||||||
"DELETE FROM t2;"
|
speedtest1_exec("INSERT INTO t2 SELECT * FROM t1;");
|
||||||
"INSERT INTO t2 SELECT * FROM t1;"
|
|
||||||
);
|
|
||||||
speedtest1_end_test();
|
speedtest1_end_test();
|
||||||
|
|
||||||
|
|
||||||
@@ -663,9 +688,17 @@ void testset_main(void){
|
|||||||
speedtest1_exec("REPLACE INTO t3(a,b,c) SELECT a,b,c FROM t1");
|
speedtest1_exec("REPLACE INTO t3(a,b,c) SELECT a,b,c FROM t1");
|
||||||
speedtest1_end_test();
|
speedtest1_end_test();
|
||||||
|
|
||||||
|
speedtest1_begin_test(300, "Refill a %d-row table using (b&1)==(a&1)", sz);
|
||||||
|
speedtest1_exec("DELETE FROM t2;");
|
||||||
|
speedtest1_exec("INSERT INTO t2(a,b,c)\n"
|
||||||
|
" SELECT a,b,c FROM t1 WHERE (b&1)==(a&1);");
|
||||||
|
speedtest1_exec("INSERT INTO t2(a,b,c)\n"
|
||||||
|
" SELECT a,b,c FROM t1 WHERE (b&1)<>(a&1);");
|
||||||
|
speedtest1_end_test();
|
||||||
|
|
||||||
|
|
||||||
n = sz/5;
|
n = sz/5;
|
||||||
speedtest1_begin_test(300, "%d four-ways joins", n);
|
speedtest1_begin_test(310, "%d four-ways joins", n);
|
||||||
speedtest1_exec("BEGIN");
|
speedtest1_exec("BEGIN");
|
||||||
speedtest1_prepare(
|
speedtest1_prepare(
|
||||||
"SELECT t1.c FROM t1, t2, t3, t4\n"
|
"SELECT t1.c FROM t1, t2, t3, t4\n"
|
||||||
@@ -684,7 +717,15 @@ void testset_main(void){
|
|||||||
speedtest1_exec("COMMIT");
|
speedtest1_exec("COMMIT");
|
||||||
speedtest1_end_test();
|
speedtest1_end_test();
|
||||||
|
|
||||||
|
speedtest1_begin_test(320, "subquery in result set", n);
|
||||||
|
speedtest1_prepare(
|
||||||
|
"SELECT sum(a), max(c),\n"
|
||||||
|
" avg((SELECT a FROM t2 WHERE 5+t2.b=t1.b) AND rowid<?1), max(c)\n"
|
||||||
|
" FROM t1 WHERE rowid<?1;"
|
||||||
|
);
|
||||||
|
sqlite3_bind_int(g.pStmt, 1, est_square_root(g.szTest)*50);
|
||||||
|
speedtest1_run();
|
||||||
|
speedtest1_end_test();
|
||||||
|
|
||||||
speedtest1_begin_test(980, "PRAGMA integrity_check");
|
speedtest1_begin_test(980, "PRAGMA integrity_check");
|
||||||
speedtest1_exec("PRAGMA integrity_check");
|
speedtest1_exec("PRAGMA integrity_check");
|
||||||
@@ -757,6 +798,9 @@ int main(int argc, char **argv){
|
|||||||
cacheSize = integerValue(argv[i]);
|
cacheSize = integerValue(argv[i]);
|
||||||
}else if( strcmp(z,"exclusive")==0 ){
|
}else if( strcmp(z,"exclusive")==0 ){
|
||||||
doExclusive = 1;
|
doExclusive = 1;
|
||||||
|
}else if( strcmp(z,"explain")==0 ){
|
||||||
|
g.bSqlOnly = 1;
|
||||||
|
g.bExplain = 1;
|
||||||
}else if( strcmp(z,"heap")==0 ){
|
}else if( strcmp(z,"heap")==0 ){
|
||||||
if( i>=argc-2 ) fatal_error("missing arguments on %s\n", argv[i]);
|
if( i>=argc-2 ) fatal_error("missing arguments on %s\n", argv[i]);
|
||||||
nHeap = integerValue(argv[i+1]);
|
nHeap = integerValue(argv[i+1]);
|
||||||
@@ -896,6 +940,7 @@ int main(int argc, char **argv){
|
|||||||
speedtest1_exec("PRAGMA journal_mode=%s", zJMode);
|
speedtest1_exec("PRAGMA journal_mode=%s", zJMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( g.bExplain ) printf(".explain\n.echo on\n");
|
||||||
if( strcmp(zTSet,"main")==0 ){
|
if( strcmp(zTSet,"main")==0 ){
|
||||||
testset_main();
|
testset_main();
|
||||||
}else if( strcmp(zTSet,"debug1")==0 ){
|
}else if( strcmp(zTSet,"debug1")==0 ){
|
||||||
|
@@ -164,7 +164,6 @@ db close
|
|||||||
forcedelete test.db
|
forcedelete test.db
|
||||||
sqlite3 db test.db
|
sqlite3 db test.db
|
||||||
register_dbstat_vtab db
|
register_dbstat_vtab db
|
||||||
breakpoint
|
|
||||||
do_execsql_test stat-5.1 {
|
do_execsql_test stat-5.1 {
|
||||||
PRAGMA auto_vacuum = OFF;
|
PRAGMA auto_vacuum = OFF;
|
||||||
CREATE VIRTUAL TABLE temp.stat USING dbstat;
|
CREATE VIRTUAL TABLE temp.stat USING dbstat;
|
||||||
|
@@ -44,7 +44,6 @@ do_test tkt-94c94-2.1 {
|
|||||||
execsql { CREATE TABLE t2(x, y) } db
|
execsql { CREATE TABLE t2(x, y) } db
|
||||||
} {}
|
} {}
|
||||||
do_test tkt-94c94-2.2 {
|
do_test tkt-94c94-2.2 {
|
||||||
breakpoint
|
|
||||||
execsql { INSERT INTO t2 VALUES(1, 2) } db2
|
execsql { INSERT INTO t2 VALUES(1, 2) } db2
|
||||||
} {}
|
} {}
|
||||||
do_test tkt-94c94-2.3 {
|
do_test tkt-94c94-2.3 {
|
||||||
|
@@ -116,7 +116,6 @@ do_test vtab_shared-1.10 {
|
|||||||
} {1 {database table is locked: sqlite_master}}
|
} {1 {database table is locked: sqlite_master}}
|
||||||
|
|
||||||
do_test vtab_shared-1.11 {
|
do_test vtab_shared-1.11 {
|
||||||
breakpoint
|
|
||||||
execsql {
|
execsql {
|
||||||
CREATE VIRTUAL TABLE t2 USING echo(t0);
|
CREATE VIRTUAL TABLE t2 USING echo(t0);
|
||||||
CREATE VIRTUAL TABLE t3 USING echo(t0);
|
CREATE VIRTUAL TABLE t3 USING echo(t0);
|
||||||
|
@@ -852,7 +852,6 @@ do_test wal-13.1.2 {
|
|||||||
sqlite3 db test.db
|
sqlite3 db test.db
|
||||||
execsql { SELECT * FROM t2 }
|
execsql { SELECT * FROM t2 }
|
||||||
} {B 2}
|
} {B 2}
|
||||||
breakpoint
|
|
||||||
do_test wal-13.1.3 {
|
do_test wal-13.1.3 {
|
||||||
db close
|
db close
|
||||||
file exists test.db-wal
|
file exists test.db-wal
|
||||||
|
@@ -1279,7 +1279,6 @@ foreach {tn settings restart_sync commit_sync ckpt_sync} {
|
|||||||
PRAGMA synchronous = [lindex $settings 2];
|
PRAGMA synchronous = [lindex $settings 2];
|
||||||
" {0 wal}
|
" {0 wal}
|
||||||
|
|
||||||
if { $tn==2} breakpoint
|
|
||||||
do_test 15.$tn.2 {
|
do_test 15.$tn.2 {
|
||||||
set sync(normal) 0
|
set sync(normal) 0
|
||||||
set sync(full) 0
|
set sync(full) 0
|
||||||
|
@@ -567,7 +567,6 @@ do_test walfault-14-pre {
|
|||||||
} {}
|
} {}
|
||||||
do_faultsim_test walfault-14 -prep {
|
do_faultsim_test walfault-14 -prep {
|
||||||
faultsim_restore_and_reopen
|
faultsim_restore_and_reopen
|
||||||
breakpoint
|
|
||||||
execsql {
|
execsql {
|
||||||
SELECT count(*) FROM abc;
|
SELECT count(*) FROM abc;
|
||||||
PRAGMA locking_mode = exclusive;
|
PRAGMA locking_mode = exclusive;
|
||||||
|
Reference in New Issue
Block a user