1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-08 14:02:16 +03:00

Merge recent trunk enhancements into reuse-schema branch.

FossilOrigin-Name: 92d8f967c9a7e4005c63703af8075b3d2ae5aa43c6b5bc6e599735dc4479bef6
This commit is contained in:
drh
2021-06-17 17:26:53 +00:00
32 changed files with 323 additions and 110 deletions

View File

@@ -14,13 +14,8 @@
#define _CRT_SECURE_NO_DEPRECATE #define _CRT_SECURE_NO_DEPRECATE
#include <windows.h> #include <windows.h>
#define NO_SHLWAPI_GDI
#define NO_SHLWAPI_STREAM
#define NO_SHLWAPI_REG
#include <shlwapi.h>
#pragma comment (lib, "user32.lib") #pragma comment (lib, "user32.lib")
#pragma comment (lib, "kernel32.lib") #pragma comment (lib, "kernel32.lib")
#pragma comment (lib, "shlwapi.lib")
#include <stdio.h> #include <stdio.h>
#include <math.h> #include <math.h>
@@ -39,15 +34,15 @@
#endif #endif
/* protos */ /* protos */
static int CheckForCompilerFeature(const char *option); static int CheckForCompilerFeature(const char *option);
static int CheckForLinkerFeature(const char *option); static int CheckForLinkerFeature(const char **options, int count);
static int IsIn(const char *string, const char *substring); static int IsIn(const char *string, const char *substring);
static int SubstituteFile(const char *substs, const char *filename); static int SubstituteFile(const char *substs, const char *filename);
static int QualifyPath(const char *path); static int QualifyPath(const char *path);
static const char *GetVersionFromFile(const char *filename, const char *match); static int LocateDependency(const char *keyfile);
static const char *GetVersionFromFile(const char *filename, const char *match, int numdots);
static DWORD WINAPI ReadFromPipe(LPVOID args); static DWORD WINAPI ReadFromPipe(LPVOID args);
/* globals */ /* globals */
@@ -74,6 +69,7 @@ main(
char msg[300]; char msg[300];
DWORD dwWritten; DWORD dwWritten;
int chars; int chars;
const char *s;
/* /*
* Make sure children (cl.exe and link.exe) are kept quiet. * Make sure children (cl.exe and link.exe) are kept quiet.
@@ -102,16 +98,16 @@ main(
} }
return CheckForCompilerFeature(argv[2]); return CheckForCompilerFeature(argv[2]);
case 'l': case 'l':
if (argc != 3) { if (argc < 3) {
chars = snprintf(msg, sizeof(msg) - 1, chars = snprintf(msg, sizeof(msg) - 1,
"usage: %s -l <linker option>\n" "usage: %s -l <linker option> ?<mandatory option> ...?\n"
"Tests for whether link.exe supports an option\n" "Tests for whether link.exe supports an option\n"
"exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]); "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]);
WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
&dwWritten, NULL); &dwWritten, NULL);
return 2; return 2;
} }
return CheckForLinkerFeature(argv[2]); return CheckForLinkerFeature(&argv[2], argc-2);
case 'f': case 'f':
if (argc == 2) { if (argc == 2) {
chars = snprintf(msg, sizeof(msg) - 1, chars = snprintf(msg, sizeof(msg) - 1,
@@ -153,8 +149,13 @@ main(
&dwWritten, NULL); &dwWritten, NULL);
return 0; return 0;
} }
printf("%s\n", GetVersionFromFile(argv[2], argv[3])); s = GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0');
return 0; if (s && *s) {
printf("%s\n", s);
return 0;
} else
return 1; /* Version not found. Return non-0 exit code */
case 'Q': case 'Q':
if (argc != 3) { if (argc != 3) {
chars = snprintf(msg, sizeof(msg) - 1, chars = snprintf(msg, sizeof(msg) - 1,
@@ -166,6 +167,18 @@ main(
return 2; return 2;
} }
return QualifyPath(argv[2]); return QualifyPath(argv[2]);
case 'L':
if (argc != 3) {
chars = snprintf(msg, sizeof(msg) - 1,
"usage: %s -L keypath\n"
"Emit the fully qualified path of directory containing keypath\n"
"exitcodes: 0 == success, 1 == not found, 2 == error\n", argv[0]);
WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars,
&dwWritten, NULL);
return 2;
}
return LocateDependency(argv[2]);
} }
} }
chars = snprintf(msg, sizeof(msg) - 1, chars = snprintf(msg, sizeof(msg) - 1,
@@ -313,7 +326,8 @@ CheckForCompilerFeature(
static int static int
CheckForLinkerFeature( CheckForLinkerFeature(
const char *option) const char **options,
int count)
{ {
STARTUPINFO si; STARTUPINFO si;
PROCESS_INFORMATION pi; PROCESS_INFORMATION pi;
@@ -322,7 +336,8 @@ CheckForLinkerFeature(
char msg[300]; char msg[300];
BOOL ok; BOOL ok;
HANDLE hProcess, h, pipeThreads[2]; HANDLE hProcess, h, pipeThreads[2];
char cmdline[100]; int i;
char cmdline[255];
hProcess = GetCurrentProcess(); hProcess = GetCurrentProcess();
@@ -368,7 +383,11 @@ CheckForLinkerFeature(
* Append our option for testing. * Append our option for testing.
*/ */
lstrcat(cmdline, option); for (i = 0; i < count; i++) {
lstrcat(cmdline, " \"");
lstrcat(cmdline, options[i]);
lstrcat(cmdline, "\"");
}
ok = CreateProcess( ok = CreateProcess(
NULL, /* Module name. */ NULL, /* Module name. */
@@ -433,7 +452,9 @@ CheckForLinkerFeature(
return !(strstr(Out.buffer, "LNK1117") != NULL || return !(strstr(Out.buffer, "LNK1117") != NULL ||
strstr(Err.buffer, "LNK1117") != NULL || strstr(Err.buffer, "LNK1117") != NULL ||
strstr(Out.buffer, "LNK4044") != NULL || strstr(Out.buffer, "LNK4044") != NULL ||
strstr(Err.buffer, "LNK4044") != NULL); strstr(Err.buffer, "LNK4044") != NULL ||
strstr(Out.buffer, "LNK4224") != NULL ||
strstr(Err.buffer, "LNK4224") != NULL);
} }
static DWORD WINAPI static DWORD WINAPI
@@ -479,7 +500,8 @@ IsIn(
static const char * static const char *
GetVersionFromFile( GetVersionFromFile(
const char *filename, const char *filename,
const char *match) const char *match,
int numdots)
{ {
size_t cbBuffer = 100; size_t cbBuffer = 100;
static char szBuffer[100]; static char szBuffer[100];
@@ -497,9 +519,10 @@ GetVersionFromFile(
p = strstr(szBuffer, match); p = strstr(szBuffer, match);
if (p != NULL) { if (p != NULL) {
/* /*
* Skip to first digit. * Skip to first digit after the match.
*/ */
p += strlen(match);
while (*p && !isdigit(*p)) { while (*p && !isdigit(*p)) {
++p; ++p;
} }
@@ -509,7 +532,8 @@ GetVersionFromFile(
*/ */
q = p; q = p;
while (*q && (isalnum(*q) || *q == '.')) { while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q)
&& (!strchr("ab", q[-1])) || --numdots))) {
++q; ++q;
} }
@@ -619,7 +643,7 @@ SubstituteFile(
} }
/* debug: dump the list */ /* debug: dump the list */
#ifdef _DEBUG #ifndef NDEBUG
{ {
int n = 0; int n = 0;
list_item_t *p = NULL; list_item_t *p = NULL;
@@ -659,6 +683,17 @@ SubstituteFile(
return 0; return 0;
} }
BOOL FileExists(LPCTSTR szPath)
{
#ifndef INVALID_FILE_ATTRIBUTES
#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
#endif
DWORD pathAttr = GetFileAttributes(szPath);
return (pathAttr != INVALID_FILE_ATTRIBUTES &&
!(pathAttr & FILE_ATTRIBUTE_DIRECTORY));
}
/* /*
* QualifyPath -- * QualifyPath --
* *
@@ -672,17 +707,103 @@ QualifyPath(
const char *szPath) const char *szPath)
{ {
char szCwd[MAX_PATH + 1]; char szCwd[MAX_PATH + 1];
char szTmp[MAX_PATH + 1];
char *p; GetFullPathName(szPath, sizeof(szCwd)-1, szCwd, NULL);
GetCurrentDirectory(MAX_PATH, szCwd);
while ((p = strchr(szPath, '/')) && *p)
*p = '\\';
PathCombine(szTmp, szCwd, szPath);
PathCanonicalize(szCwd, szTmp);
printf("%s\n", szCwd); printf("%s\n", szCwd);
return 0; return 0;
} }
/*
* Implements LocateDependency for a single directory. See that command
* for an explanation.
* Returns 0 if found after printing the directory.
* Returns 1 if not found but no errors.
* Returns 2 on any kind of error
* Basically, these are used as exit codes for the process.
*/
static int LocateDependencyHelper(const char *dir, const char *keypath)
{
HANDLE hSearch;
char path[MAX_PATH+1];
int dirlen, keylen, ret;
WIN32_FIND_DATA finfo;
if (dir == NULL || keypath == NULL)
return 2; /* Have no real error reporting mechanism into nmake */
dirlen = strlen(dir);
if ((dirlen + 3) > sizeof(path))
return 2;
strncpy(path, dir, dirlen);
strncpy(path+dirlen, "\\*", 3); /* Including terminating \0 */
keylen = strlen(keypath);
#if 0 /* This function is not available in Visual C++ 6 */
/*
* Use numerics 0 -> FindExInfoStandard,
* 1 -> FindExSearchLimitToDirectories,
* as these are not defined in Visual C++ 6
*/
hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0);
#else
hSearch = FindFirstFile(path, &finfo);
#endif
if (hSearch == INVALID_HANDLE_VALUE)
return 1; /* Not found */
/* Loop through all subdirs checking if the keypath is under there */
ret = 1; /* Assume not found */
do {
int sublen;
/*
* We need to check it is a directory despite the
* FindExSearchLimitToDirectories in the above call. See SDK docs
*/
if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
continue;
sublen = strlen(finfo.cFileName);
if ((dirlen+1+sublen+1+keylen+1) > sizeof(path))
continue; /* Path does not fit, assume not matched */
strncpy(path+dirlen+1, finfo.cFileName, sublen);
path[dirlen+1+sublen] = '\\';
strncpy(path+dirlen+1+sublen+1, keypath, keylen+1);
if (FileExists(path)) {
/* Found a match, print to stdout */
path[dirlen+1+sublen] = '\0';
QualifyPath(path);
ret = 0;
break;
}
} while (FindNextFile(hSearch, &finfo));
FindClose(hSearch);
return ret;
}
/*
* LocateDependency --
*
* Locates a dependency for a package.
* keypath - a relative path within the package directory
* that is used to confirm it is the correct directory.
* The search path for the package directory is currently only
* the parent and grandparent of the current working directory.
* If found, the command prints
* name_DIRPATH=<full path of located directory>
* and returns 0. If not found, does not print anything and returns 1.
*/
static int LocateDependency(const char *keypath)
{
int i, ret;
static const char *paths[] = {"..", "..\\..", "..\\..\\.."};
for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) {
ret = LocateDependencyHelper(paths[i], keypath);
if (ret == 0)
return ret;
}
return ret;
}
/* /*
* Local variables: * Local variables:
* mode: c * mode: c

View File

@@ -657,6 +657,7 @@ int sqlite3_appendvfs_init(
(void)pzErrMsg; (void)pzErrMsg;
(void)db; (void)db;
pOrig = sqlite3_vfs_find(0); pOrig = sqlite3_vfs_find(0);
if( pOrig==0 ) return SQLITE_ERROR;
apnd_vfs.iVersion = pOrig->iVersion; apnd_vfs.iVersion = pOrig->iVersion;
apnd_vfs.pAppData = pOrig; apnd_vfs.pAppData = pOrig;
apnd_vfs.szOsFile = pOrig->szOsFile + sizeof(ApndFile); apnd_vfs.szOsFile = pOrig->szOsFile + sizeof(ApndFile);

View File

@@ -823,6 +823,7 @@ static int cksmRegisterVfs(void){
sqlite3_vfs *pOrig; sqlite3_vfs *pOrig;
if( sqlite3_vfs_find("cksmvfs")!=0 ) return SQLITE_OK; if( sqlite3_vfs_find("cksmvfs")!=0 ) return SQLITE_OK;
pOrig = sqlite3_vfs_find(0); pOrig = sqlite3_vfs_find(0);
if( pOrig==0 ) return SQLITE_ERROR;
cksm_vfs.iVersion = pOrig->iVersion; cksm_vfs.iVersion = pOrig->iVersion;
cksm_vfs.pAppData = pOrig; cksm_vfs.pAppData = pOrig;
cksm_vfs.szOsFile = pOrig->szOsFile + sizeof(CksmFile); cksm_vfs.szOsFile = pOrig->szOsFile + sizeof(CksmFile);
@@ -870,9 +871,6 @@ int sqlite3_cksumvfs_init(
SQLITE_EXTENSION_INIT2(pApi); SQLITE_EXTENSION_INIT2(pApi);
(void)pzErrMsg; /* not used */ (void)pzErrMsg; /* not used */
rc = cksmRegisterFunc(db, 0, 0); rc = cksmRegisterFunc(db, 0, 0);
if( rc==SQLITE_OK ){
}
if( rc==SQLITE_OK ){ if( rc==SQLITE_OK ){
rc = cksmRegisterVfs(); rc = cksmRegisterVfs();
} }

View File

@@ -559,6 +559,7 @@ int sqlite3_memvfs_init(
int rc = SQLITE_OK; int rc = SQLITE_OK;
SQLITE_EXTENSION_INIT2(pApi); SQLITE_EXTENSION_INIT2(pApi);
mem_vfs.pAppData = sqlite3_vfs_find(0); mem_vfs.pAppData = sqlite3_vfs_find(0);
if( mem_vfs.pAppData==0 ) return SQLITE_ERROR;
mem_vfs.szOsFile = sizeof(MemFile); mem_vfs.szOsFile = sizeof(MemFile);
rc = sqlite3_vfs_register(&mem_vfs, 1); rc = sqlite3_vfs_register(&mem_vfs, 1);
#ifdef MEMVFS_TEST #ifdef MEMVFS_TEST

View File

@@ -754,6 +754,7 @@ static int vlogCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *p){
*/ */
int sqlite3_register_vfslog(const char *zArg){ int sqlite3_register_vfslog(const char *zArg){
vlog_vfs.pVfs = sqlite3_vfs_find(0); vlog_vfs.pVfs = sqlite3_vfs_find(0);
if( vlog_vfs.pVfs==0 ) return SQLITE_ERROR;
vlog_vfs.base.szOsFile = sizeof(VLogFile) + vlog_vfs.pVfs->szOsFile; vlog_vfs.base.szOsFile = sizeof(VLogFile) + vlog_vfs.pVfs->szOsFile;
return sqlite3_vfs_register(&vlog_vfs.base, 1); return sqlite3_vfs_register(&vlog_vfs.base, 1);
} }

View File

@@ -806,6 +806,7 @@ int sqlite3_vfsstat_init(
int rc = SQLITE_OK; int rc = SQLITE_OK;
SQLITE_EXTENSION_INIT2(pApi); SQLITE_EXTENSION_INIT2(pApi);
vstat_vfs.pVfs = sqlite3_vfs_find(0); vstat_vfs.pVfs = sqlite3_vfs_find(0);
if( vstat_vfs.pVfs==0 ) return SQLITE_ERROR;
vstat_vfs.base.szOsFile = sizeof(VStatFile) + vstat_vfs.pVfs->szOsFile; vstat_vfs.base.szOsFile = sizeof(VStatFile) + vstat_vfs.pVfs->szOsFile;
rc = sqlite3_vfs_register(&vstat_vfs.base, 1); rc = sqlite3_vfs_register(&vstat_vfs.base, 1);
if( rc==SQLITE_OK ){ if( rc==SQLITE_OK ){

View File

@@ -1486,6 +1486,7 @@ static int zipfileBegin(sqlite3_vtab *pVtab){
static u32 zipfileTime(void){ static u32 zipfileTime(void){
sqlite3_vfs *pVfs = sqlite3_vfs_find(0); sqlite3_vfs *pVfs = sqlite3_vfs_find(0);
u32 ret; u32 ret;
if( pVfs==0 ) return 0;
if( pVfs->iVersion>=2 && pVfs->xCurrentTimeInt64 ){ if( pVfs->iVersion>=2 && pVfs->xCurrentTimeInt64 ){
i64 ms; i64 ms;
pVfs->xCurrentTimeInt64(pVfs, &ms); pVfs->xCurrentTimeInt64(pVfs, &ms);

View File

@@ -56,7 +56,7 @@ void usage(const char *zArgv0){
void report_default_vfs(){ void report_default_vfs(){
sqlite3_vfs *pVfs = sqlite3_vfs_find(0); sqlite3_vfs *pVfs = sqlite3_vfs_find(0);
fprintf(stdout, "default vfs is \"%s\"\n", pVfs->zName); fprintf(stdout, "default vfs is \"%s\"\n", pVfs ? pVfs->zName : "NULL");
} }
void report_rbu_vfs(sqlite3rbu *pRbu){ void report_rbu_vfs(sqlite3rbu *pRbu){

View File

@@ -25,6 +25,11 @@ if {[permutation]=="session_strm" || [permutation]=="session_eec"} {
return return
} }
if {$::tcl_platform(pointerSize)<8} {
finish_test
return
}
set testprefix sessionbig set testprefix sessionbig
forcedelete test.db2 forcedelete test.db2

View File

@@ -1,5 +1,5 @@
C Update\sthis\sbranch\swith\slatest\schanges\sfrom\strunk. C Merge\srecent\strunk\senhancements\sinto\sreuse-schema\sbranch.
D 2021-06-14T14:35:33.557 D 2021-06-17T17:26:53.514
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -29,7 +29,7 @@ F autoconf/tea/pkgIndex.tcl.in 3ef61715cf1c7bdcff56947ffadb26bc991ca39d
F autoconf/tea/tclconfig/install-sh bdd5e293591621ae60d9824d86a4b1c5f22c3d00 F autoconf/tea/tclconfig/install-sh bdd5e293591621ae60d9824d86a4b1c5f22c3d00
F autoconf/tea/tclconfig/tcl.m4 66ddf0a5d5e4b1d29bff472c0985fd7fa89d0fb5 F autoconf/tea/tclconfig/tcl.m4 66ddf0a5d5e4b1d29bff472c0985fd7fa89d0fb5
F autoconf/tea/win/makefile.vc a5ff708245260c2794c6aaa0151efe5403d5896566eaf096747be0d9075284e4 F autoconf/tea/win/makefile.vc a5ff708245260c2794c6aaa0151efe5403d5896566eaf096747be0d9075284e4
F autoconf/tea/win/nmakehlp.c 247538ad8e8c508f33c03ec1fbd67d3a07ef6291 F autoconf/tea/win/nmakehlp.c 190bf8b40f6f90eeb6cbc1e5c13a19fc7ad870e479e0314c88174f71bf9e28a7
F autoconf/tea/win/rules.vc c511f222b80064096b705dbeb97060ee1d6b6d63 F autoconf/tea/win/rules.vc c511f222b80064096b705dbeb97060ee1d6b6d63
F config.guess 883205ddf25b46f10c181818bf42c09da9888884af96f79e1719264345053bd6 F config.guess 883205ddf25b46f10c181818bf42c09da9888884af96f79e1719264345053bd6
F config.h.in 6376abec766e9a0785178b1823b5a587e9f1ccbc F config.h.in 6376abec766e9a0785178b1823b5a587e9f1ccbc
@@ -287,12 +287,12 @@ F ext/lsm1/tool/mklsm1c.tcl f31561bbee5349f0a554d1ad7236ac1991fc09176626f529f607
F ext/misc/README.md d6dd0fe1d8af77040216798a6a2b0c46c73054d2f0ea544fbbcdccf6f238c240 F ext/misc/README.md d6dd0fe1d8af77040216798a6a2b0c46c73054d2f0ea544fbbcdccf6f238c240
F ext/misc/amatch.c e3ad5532799cee9a97647f483f67f43b38796b84b5a8c60594fe782a4338f358 F ext/misc/amatch.c e3ad5532799cee9a97647f483f67f43b38796b84b5a8c60594fe782a4338f358
F ext/misc/anycollseq.c 5ffdfde9829eeac52219136ad6aa7cd9a4edb3b15f4f2532de52f4a22525eddb F ext/misc/anycollseq.c 5ffdfde9829eeac52219136ad6aa7cd9a4edb3b15f4f2532de52f4a22525eddb
F ext/misc/appendvfs.c 500fef0736caafc629ca1dbae348a121367eaa4ed8c385c291cb9ad65ea790fb F ext/misc/appendvfs.c 9642c7a194a2a25dca7ad3e36af24a0a46d7702168c4ad7e59c9f9b0e16a3824
F ext/misc/blobio.c a867c4c4617f6ec223a307ebfe0eabb45e0992f74dd47722b96f3e631c0edb2a F ext/misc/blobio.c a867c4c4617f6ec223a307ebfe0eabb45e0992f74dd47722b96f3e631c0edb2a
F ext/misc/btreeinfo.c d28ce349b40054eaa9473e835837bad7a71deec33ba13e39f963d50933bfa0f9 F ext/misc/btreeinfo.c d28ce349b40054eaa9473e835837bad7a71deec33ba13e39f963d50933bfa0f9
F ext/misc/carray.c b75a0f207391038bf1540d3372f482a95c3613511c7c474db51ede1196321c7c F ext/misc/carray.c b75a0f207391038bf1540d3372f482a95c3613511c7c474db51ede1196321c7c
F ext/misc/carray.h de74ac70b2338f416723f7d538026e8ec0b7f1d388319f8f140c9a4d7677f02e F ext/misc/carray.h de74ac70b2338f416723f7d538026e8ec0b7f1d388319f8f140c9a4d7677f02e
F ext/misc/cksumvfs.c 2c6b07714f3be6c1200671c53aa781a86d2c472c0fcb2fff520375362eb94303 F ext/misc/cksumvfs.c b42ef52eaaa510d54ec320c87bea149e934a3b06cd232be2093562bf669bd572
F ext/misc/closure.c dbfd8543b2a017ae6b1a5843986b22ddf99ff126ec9634a2f4047cd14c85c243 F ext/misc/closure.c dbfd8543b2a017ae6b1a5843986b22ddf99ff126ec9634a2f4047cd14c85c243
F ext/misc/completion.c 6dafd7f4348eecc7be9e920d4b419d1fb2af75d938cd9c59a20cfe8beb2f22b9 F ext/misc/completion.c 6dafd7f4348eecc7be9e920d4b419d1fb2af75d938cd9c59a20cfe8beb2f22b9
F ext/misc/compress.c 3354c77a7c8e86e07d849916000cdac451ed96500bfb5bd83b20eb61eee012c9 F ext/misc/compress.c 3354c77a7c8e86e07d849916000cdac451ed96500bfb5bd83b20eb61eee012c9
@@ -309,7 +309,7 @@ F ext/misc/ieee754.c cd6ab89f85fda8a020559b3f4d03001a8a62dd856beda5af3f558621d12
F ext/misc/json1.c 76c5d9e0960fd15b4be79dacb76d872b4d0d983ce13e72ebfe9481d82cb9345d F ext/misc/json1.c 76c5d9e0960fd15b4be79dacb76d872b4d0d983ce13e72ebfe9481d82cb9345d
F ext/misc/memstat.c 3017a0832c645c0f8c773435620d663855f04690172316bd127270d1a7523d4d F ext/misc/memstat.c 3017a0832c645c0f8c773435620d663855f04690172316bd127270d1a7523d4d
F ext/misc/memtrace.c 7c0d115d2ef716ad0ba632c91e05bd119cb16c1aedf3bec9f06196ead2d5537b F ext/misc/memtrace.c 7c0d115d2ef716ad0ba632c91e05bd119cb16c1aedf3bec9f06196ead2d5537b
F ext/misc/memvfs.c ab36f49e02ebcdf85a1e08dc4d8599ea8f343e073ac9e0bca18a98b7e1ec9567 F ext/misc/memvfs.c 7dffa8cc89c7f2d73da4bd4ccea1bcbd2bd283e3bb4cea398df7c372a197291b
F ext/misc/mmapwarm.c 347caa99915fb254e8949ec131667b7fae99e2a9ce91bd468efb6dc372d9b7a9 F ext/misc/mmapwarm.c 347caa99915fb254e8949ec131667b7fae99e2a9ce91bd468efb6dc372d9b7a9
F ext/misc/nextchar.c 7877914c2a80c2f181dd04c3dbef550dfb54c93495dc03da2403b5dd58f34edd F ext/misc/nextchar.c 7877914c2a80c2f181dd04c3dbef550dfb54c93495dc03da2403b5dd58f34edd
F ext/misc/noop.c 81efe4cad9ec740e64388b14281cb983e6e2c223fed43eb77ab3e34946e0c1ab F ext/misc/noop.c 81efe4cad9ec740e64388b14281cb983e6e2c223fed43eb77ab3e34946e0c1ab
@@ -333,14 +333,14 @@ F ext/misc/uint.c 053fed3bce2e89583afcd4bf804d75d659879bbcedac74d0fa9ed548839a03
F ext/misc/unionvtab.c 36237f0607ca954ac13a4a0e2d2ac40c33bc6e032a5f55f431713061ef1625f9 F ext/misc/unionvtab.c 36237f0607ca954ac13a4a0e2d2ac40c33bc6e032a5f55f431713061ef1625f9
F ext/misc/urifuncs.c f71360d14fa9e7626b563f1f781c6148109462741c5235ac63ae0f8917b9c751 F ext/misc/urifuncs.c f71360d14fa9e7626b563f1f781c6148109462741c5235ac63ae0f8917b9c751
F ext/misc/uuid.c 5bb2264c1b64d163efa46509544fd7500cb8769cb7c16dd52052da8d961505cf F ext/misc/uuid.c 5bb2264c1b64d163efa46509544fd7500cb8769cb7c16dd52052da8d961505cf
F ext/misc/vfslog.c 3b25c2f56ba60788db247287be6ab024b53c4afffd412b4876db563389be0d35 F ext/misc/vfslog.c 3932ab932eeb2601dbc4447cb14d445aaa9fbe43b863ef5f014401c3420afd20
F ext/misc/vfsstat.c 389ea13983d3af926504c314f06a83cc858d5adc24b40af74aaed1fece00c118 F ext/misc/vfsstat.c 474d08efc697b8eba300082cb1eb74a5f0f3df31ed257db1cb07e72ab0e53dfb
F ext/misc/vtablog.c 5538acd0c8ddaae372331bee11608d76973436b77d6a91e8635cfc9432fba5ae F ext/misc/vtablog.c 5538acd0c8ddaae372331bee11608d76973436b77d6a91e8635cfc9432fba5ae
F ext/misc/vtshim.c 1976e6dd68dd0d64508c91a6dfab8e75f8aaf6cd F ext/misc/vtshim.c 1976e6dd68dd0d64508c91a6dfab8e75f8aaf6cd
F ext/misc/wholenumber.c a838d1bea913c514ff316c69695efbb49ea3b8cb37d22afc57f73b6b010b4546 F ext/misc/wholenumber.c a838d1bea913c514ff316c69695efbb49ea3b8cb37d22afc57f73b6b010b4546
F ext/misc/zipfile.c acbad31bd9c9ec3540fa72b2e3fcd6f757eb33117d51528c0e13d0da5c836908 F ext/misc/zipfile.c b7261ef6dbc2d18924ff80c40fb5d56c9ccfee3f822a7d3d43b7c87af3d27218
F ext/misc/zorder.c b0ff58fa643afa1d846786d51ea8d5c4b6b35aa0254ab5a82617db92f3adda64 F ext/misc/zorder.c b0ff58fa643afa1d846786d51ea8d5c4b6b35aa0254ab5a82617db92f3adda64
F ext/rbu/rbu.c b880ca5cb857d6d6f52e72eb7397813058ef48c78c5402cd04ff2b6b5437f622 F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8
F ext/rbu/rbu1.test c62904bd9526dcdc3496a21199aaf14ae191bbadbf67f076bf16be6b3f2115c2 F ext/rbu/rbu1.test c62904bd9526dcdc3496a21199aaf14ae191bbadbf67f076bf16be6b3f2115c2
F ext/rbu/rbu10.test 0a201c32202143f23c81c0144503da339786fc20acb7a2fda11601b65659f314 F ext/rbu/rbu10.test 0a201c32202143f23c81c0144503da339786fc20acb7a2fda11601b65659f314
F ext/rbu/rbu11.test 5c834cf491086b45e071eabf71f708febc143e86a384a92de69e0b1a4cace144 F ext/rbu/rbu11.test 5c834cf491086b45e071eabf71f708febc143e86a384a92de69e0b1a4cace144
@@ -447,7 +447,7 @@ F ext/session/sessionH.test b17afdbd3b8f17e9bab91e235acf167cf35485db2ab2df0ea889
F ext/session/session_common.tcl f613174665456b2d916ae8df3e5735092a1c1712f36f46840172e9a01e8cc53e F ext/session/session_common.tcl f613174665456b2d916ae8df3e5735092a1c1712f36f46840172e9a01e8cc53e
F ext/session/session_speed_test.c dcf0ef58d76b70c8fbd9eab3be77cf9deb8bc1638fed8be518b62d6cbdef88b3 F ext/session/session_speed_test.c dcf0ef58d76b70c8fbd9eab3be77cf9deb8bc1638fed8be518b62d6cbdef88b3
F ext/session/sessionat.test efe88965e74ff1bc2af9c310b28358c02d420c1fb2705cc7a28f0c1cc142c3ec F ext/session/sessionat.test efe88965e74ff1bc2af9c310b28358c02d420c1fb2705cc7a28f0c1cc142c3ec
F ext/session/sessionbig.test 5851fc7f9981e2ccf1c7d9e7cb239dc530db07d5e878ebbb2f6d993d27872a43 F ext/session/sessionbig.test 890ade19e3f80f3d3a3e83821ff79c5e2af906a67ecb5450879f0015cadf101e
F ext/session/sessiondiff.test ad13dd65664bae26744e1f18eb3cbd5588349b7e9118851d8f9364248d67bcec F ext/session/sessiondiff.test ad13dd65664bae26744e1f18eb3cbd5588349b7e9118851d8f9364248d67bcec
F ext/session/sessionfault.test da273f2712b6411e85e71465a1733b8501dbf6f7 F ext/session/sessionfault.test da273f2712b6411e85e71465a1733b8501dbf6f7
F ext/session/sessionfault2.test dd593f80b6b4786f7adfe83c5939620bc505559770cc181332da26f29cddd7bb F ext/session/sessionfault2.test dd593f80b6b4786f7adfe83c5939620bc505559770cc181332da26f29cddd7bb
@@ -479,7 +479,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca
F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
F src/alter.c f110886a20e92b66fa6f7c3ab29a490ea74b882b6b2d8775a6fc91dbe811eec3 F src/alter.c 7ea3ac556f07519db009f5e273094bfe6f3b1e2986692dbd955ea59c1aac7ede
F src/analyze.c 8b522a57784406d75f544e6d67f3fe7a7196702d3d954b7678bb4b4fe789e5a4 F src/analyze.c 8b522a57784406d75f544e6d67f3fe7a7196702d3d954b7678bb4b4fe789e5a4
F src/attach.c 74fab1b71a5fef866eae143aa5fa8c66174a4aa5829189764948e621ad3adbd6 F src/attach.c 74fab1b71a5fef866eae143aa5fa8c66174a4aa5829189764948e621ad3adbd6
F src/auth.c 08954fdc4cc2da5264ba5b75cfd90b67a6fc7d1710a02ccf917c38eadec77853 F src/auth.c 08954fdc4cc2da5264ba5b75cfd90b67a6fc7d1710a02ccf917c38eadec77853
@@ -489,7 +489,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
F src/btree.c 399e1ebcd6c4f9ad47f5457bfe3623441db287f0923433cf6539497791557be8 F src/btree.c 399e1ebcd6c4f9ad47f5457bfe3623441db287f0923433cf6539497791557be8
F src/btree.h 096cc53baa58be22b02c896d1cf933c38cfc6d65f9253c1367ece8cc88a24de5 F src/btree.h 096cc53baa58be22b02c896d1cf933c38cfc6d65f9253c1367ece8cc88a24de5
F src/btreeInt.h 7bc15a24a02662409ebcd6aeaa1065522d14b7fda71573a2b0568b458f514ae0 F src/btreeInt.h 7bc15a24a02662409ebcd6aeaa1065522d14b7fda71573a2b0568b458f514ae0
F src/build.c 817a3521be208a51d0129a2e02797c2fd82e7dfde63ee6f640ded720aee96d4a F src/build.c 26f1e22077a9b61f571c0c678fb30938d412d73cc14ae57ce469534142f14d07
F src/callback.c d8cdf5d697a31cf54a2b64bce9001fe24f3522a566f44c9fe1eb3a0c7e291c56 F src/callback.c d8cdf5d697a31cf54a2b64bce9001fe24f3522a566f44c9fe1eb3a0c7e291c56
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
F src/ctime.c 1ee55d93b848c88b1a333a19e923b58e1bb328d95edb5bc5be9cc94794c6998d F src/ctime.c 1ee55d93b848c88b1a333a19e923b58e1bb328d95edb5bc5be9cc94794c6998d
@@ -500,7 +500,7 @@ F src/delete.c 62451bba9fe641159e9c0b7d9d2bab1c48d0cff11e16de2d14000603d2af1fcf
F src/expr.c 30a2abf526531ce6bd45fbc85bfec0fc3f6e5a0fb490cd2350855f2fc34dd789 F src/expr.c 30a2abf526531ce6bd45fbc85bfec0fc3f6e5a0fb490cd2350855f2fc34dd789
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
F src/fkey.c 6dcbab4ead1dbfdc19da70a8650e5734a5124765f75fb840100117a7a45980d2 F src/fkey.c 6dcbab4ead1dbfdc19da70a8650e5734a5124765f75fb840100117a7a45980d2
F src/func.c 88fd711754a7241cb9f8eb1391370fd0c0cea756b3358efa274c5d1efd59af93 F src/func.c 9eb67f0aaf1cf439c21d6fc8afe270973d6e8345af3f1ebda98ad42186d30f5b
F src/global.c 25ba4d58476f6be29bba9d9d14f7f146b78476d3a4d75ebb8c3b736328afe0f9 F src/global.c 25ba4d58476f6be29bba9d9d14f7f146b78476d3a4d75ebb8c3b736328afe0f9
F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19 F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19
F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38 F src/hash.h 9d56a9079d523b648774c1784b74b89bd93fac7b365210157482e4319a468f38
@@ -509,14 +509,14 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
F src/insert.c 2189e0e596010a0dc5405d9f14f78db1ee2fa71138c931f5b6ea96610b95bfc1 F src/insert.c 2189e0e596010a0dc5405d9f14f78db1ee2fa71138c931f5b6ea96610b95bfc1
F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
F src/loadext.c 12684b3f19cd103cea97cdf14d0758196d0c646e12a898d7245141a9abfde9a4 F src/loadext.c 12684b3f19cd103cea97cdf14d0758196d0c646e12a898d7245141a9abfde9a4
F src/main.c 76caa2fdc09e8621b66d17ef5467daae442a0a73dee9522f8b6930b6e154d065 F src/main.c 38617b2852922714056d996fab95f012abc62a69292e66d817ab411659891dfb
F src/malloc.c cbc93cdd429c4594912017d92ab656e2579aca64dbd1c6888551275bed46f25b F src/malloc.c cbc93cdd429c4594912017d92ab656e2579aca64dbd1c6888551275bed46f25b
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
F src/mem2.c b93b8762ab999a29ae7751532dadf0a1ac78040308a5fb1d17fcc365171d67eb F src/mem2.c b93b8762ab999a29ae7751532dadf0a1ac78040308a5fb1d17fcc365171d67eb
F src/mem3.c 30301196cace2a085cbedee1326a49f4b26deff0af68774ca82c1f7c06fda4f6 F src/mem3.c 30301196cace2a085cbedee1326a49f4b26deff0af68774ca82c1f7c06fda4f6
F src/mem5.c 9bf955937b07f8c32541c8a9991f33ce3173d944 F src/mem5.c 9bf955937b07f8c32541c8a9991f33ce3173d944
F src/memdb.c f6ce717b26cd51a24cda62fce611b4b72b3db367113374aa498e489a69470715 F src/memdb.c 2f2e8efc6e531c59cf8255f0bf4ad81f2e88e0a394581244154c8cf5141757ce
F src/memjournal.c a85f0dc5c02a42453d0bc3819ecfb5666cb6433e5deefcd93ccbe05c9f088b83 F src/memjournal.c a85f0dc5c02a42453d0bc3819ecfb5666cb6433e5deefcd93ccbe05c9f088b83
F src/msvc.h 3a15918220367a8876be3fa4f2abe423a861491e84b864fb2b7426bf022a28f8 F src/msvc.h 3a15918220367a8876be3fa4f2abe423a861491e84b864fb2b7426bf022a28f8
F src/mutex.c 5e3409715552348732e97b9194abe92fdfcd934cfb681df4ba0ab87ac6c18d25 F src/mutex.c 5e3409715552348732e97b9194abe92fdfcd934cfb681df4ba0ab87ac6c18d25
@@ -529,7 +529,7 @@ F src/os.c 59ed1f503347e8b5434c0ce7d7d0f02a3f24a72fea8b26d0bba2de8dfaef778b
F src/os.h 26890f540b475598cd9881dcc68931377b8d429d3ea3e2eeb64470cde64199f8 F src/os.h 26890f540b475598cd9881dcc68931377b8d429d3ea3e2eeb64470cde64199f8
F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85 F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85
F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586
F src/os_unix.c efa60c1cb54dba767abbba3c6dd67d3df5ef8aa26e2e499c37f055f56a374068 F src/os_unix.c feac74a0ba7652c405ba30f61d9e738be717d15899f2915a129ef160a3e5b26b
F src/os_win.c 77d39873836f1831a9b0b91894fec45ab0e9ca8e067dc8c549e1d1eca1566fe9 F src/os_win.c 77d39873836f1831a9b0b91894fec45ab0e9ca8e067dc8c549e1d1eca1566fe9
F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
F src/pager.c 95c255256b13827caf038c8f963d334784073f38ab6ef9d70371d9d04f3c43e0 F src/pager.c 95c255256b13827caf038c8f963d334784073f38ab6ef9d70371d9d04f3c43e0
@@ -542,15 +542,15 @@ F src/pragma.c 300dcb000f9ac0ac35c913f5e232234275e5007d25147a6915e4ae06b4afd662
F src/pragma.h ce2b135cde481eeb198af0dfc4781d58528ce80b17580a2b747b8fd4bc969e44 F src/pragma.h ce2b135cde481eeb198af0dfc4781d58528ce80b17580a2b747b8fd4bc969e44
F src/prepare.c 3668279bfdec5e58e54a284b068d36746efadd5b2ecbb7475f3a1d12a8297653 F src/prepare.c 3668279bfdec5e58e54a284b068d36746efadd5b2ecbb7475f3a1d12a8297653
F src/printf.c 78fabb49b9ac9a12dd1c89d744abdc9b67fd3205e62967e158f78b965a29ec4b F src/printf.c 78fabb49b9ac9a12dd1c89d744abdc9b67fd3205e62967e158f78b965a29ec4b
F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c
F src/resolve.c 35630effd4d16d2373caa41bae40a3d71f853f3ad0cb4f572f2ed4b8c350c1e9 F src/resolve.c 35630effd4d16d2373caa41bae40a3d71f853f3ad0cb4f572f2ed4b8c350c1e9
F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
F src/select.c 371cf15116b20b236f099c15daafd2ab6ef4bba43a263100aef60506f25cb3ff F src/select.c 4fa607bab6bcc580f12dbaf9c800b2250a1e408f10321a1d3bcb1dd30c447e62
F src/shell.c.in a8230d4150b3ed4a2a82e966bc9fd49372fe7d2fabe93f829b1bc766fdbe2e4d F src/shell.c.in b74c72fe42e054af48e0fc02069bbf094ec0eee5310c264d94385da55c3742ef
F src/sqlite.h.in 73a6425c6ba482e6b99c130e03ab3385cc9e4b7313f8ed99969c47488fb099b5 F src/sqlite.h.in 8e559f3ab1329de8aeb5091dc0b2680a36f09fc556c1d05a878300ef93f3e4fd
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 61b38c073d5e1e96a3d45271b257aef27d0d13da2bea5347692ae579475cd95e F src/sqlite3ext.h 61b38c073d5e1e96a3d45271b257aef27d0d13da2bea5347692ae579475cd95e
F src/sqliteInt.h c2f3217d0cb8aee8db9e4a60add1384f19f8d6f07950e3949560a39278039bea F src/sqliteInt.h 3e236c3a570214d3eb5777bd9cfe58a35179c1ad36432f17b1a45c2d5d43d81f
F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
F src/status.c d0956e57c71160155f620a3efeb1e5c05a3f8b9a897dd09c5263268e5d237579 F src/status.c d0956e57c71160155f620a3efeb1e5c05a3f8b9a897dd09c5263268e5d237579
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -625,7 +625,7 @@ F src/vdbeapi.c aa5aaf2c37676b83af5724c6cd8207a3064ed46a217fd180957f75ac84f7a2a5
F src/vdbeaux.c da8c06b87ff71a25a2eace72721f4506bd8a2bab87828413dbf33c77b8326f44 F src/vdbeaux.c da8c06b87ff71a25a2eace72721f4506bd8a2bab87828413dbf33c77b8326f44
F src/vdbeblob.c 3356ecdb98661972977744bb5c66c9cc02c0fc512267e749949b6d8b792dabe4 F src/vdbeblob.c 3356ecdb98661972977744bb5c66c9cc02c0fc512267e749949b6d8b792dabe4
F src/vdbemem.c 53881aa0a7845922a075b3f375695588618098871a7a4120af4c297b80fa3e64 F src/vdbemem.c 53881aa0a7845922a075b3f375695588618098871a7a4120af4c297b80fa3e64
F src/vdbesort.c f5b5e473a7cee44e47a94817b042fd7172cf3aa2c0a7928a8339d612bcfdec5a F src/vdbesort.c cd5130f683706c1a43e165a74187745fb3351cb56052cf9dc91de820634bbde2
F src/vdbetrace.c 666c6fd9f1b62be6999e072a45b913e3c2c3518bc60dfd4d54fe304130acb724 F src/vdbetrace.c 666c6fd9f1b62be6999e072a45b913e3c2c3518bc60dfd4d54fe304130acb724
F src/vdbevtab.c f99b275366c5fc5e2d99f734729880994ab9500bdafde7fae3b02d562b9d323c F src/vdbevtab.c f99b275366c5fc5e2d99f734729880994ab9500bdafde7fae3b02d562b9d323c
F src/vtab.c b567ce416e332442ec51ccc7f1ac6059d1e32058cdfc8bceaf57d39b4150b094 F src/vtab.c b567ce416e332442ec51ccc7f1ac6059d1e32058cdfc8bceaf57d39b4150b094
@@ -633,7 +633,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
F src/wal.c c8ec20a1ca161d5635a4f19c2a4efec2e006e19a8a61f272bf6bce1c80ab7436 F src/wal.c c8ec20a1ca161d5635a4f19c2a4efec2e006e19a8a61f272bf6bce1c80ab7436
F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a
F src/walker.c 7342becedf3f8a26f9817f08436bdf8b56ad69af83705f6b9320a0ad3092c2ac F src/walker.c 7342becedf3f8a26f9817f08436bdf8b56ad69af83705f6b9320a0ad3092c2ac
F src/where.c dc062832c30aa6c5f17805c1235b2b621cd9db506412d5d3ef0799d26ae3396f F src/where.c 4caf843825c6292440113258fefaa6f747fd570c6915628957e42e39529988f5
F src/whereInt.h 9248161dd004f625ce5d3841ca9b99fed3fc8d61522cf76340fc5217dbe1375b F src/whereInt.h 9248161dd004f625ce5d3841ca9b99fed3fc8d61522cf76340fc5217dbe1375b
F src/wherecode.c 9f1f65d11437b25cd0a1497a170514c785f19ce6ad9d3e6fc73719cb5a49012f F src/wherecode.c 9f1f65d11437b25cd0a1497a170514c785f19ce6ad9d3e6fc73719cb5a49012f
F src/whereexpr.c 5a9c9f5d2dac4bcdcaae3035034b4667523f731df228e0bb1d4efc669efa9da5 F src/whereexpr.c 5a9c9f5d2dac4bcdcaae3035034b4667523f731df228e0bb1d4efc669efa9da5
@@ -660,7 +660,7 @@ F test/altermalloc.test 167a47de41b5c638f5f5c6efb59784002b196fff70f98d9b4ed3cd74
F test/altermalloc2.test ca3ebc01670d9313953a2b7628d8cc00dc5ea9988f229b3cbbbe1cca506dae45 F test/altermalloc2.test ca3ebc01670d9313953a2b7628d8cc00dc5ea9988f229b3cbbbe1cca506dae45
F test/altermalloc3.test 059841a3de6b6780efd9f0b30bf1d9b4443c555f68d39975cbcac2583167b239 F test/altermalloc3.test 059841a3de6b6780efd9f0b30bf1d9b4443c555f68d39975cbcac2583167b239
F test/alterqf.test 67568ad152db8c1187b15633b801242cf960f1beafc51261a3d1725d910baeb2 F test/alterqf.test 67568ad152db8c1187b15633b801242cf960f1beafc51261a3d1725d910baeb2
F test/altertab.test 4120b9b2baa96ef2b0aaf4dd46b1858171503edf5e346b5ce939c73b4d314fa6 F test/altertab.test 466b9757630d68455080690b6e99c5ff11b199df4b3530e17f3df10a63aa05d3
F test/altertab2.test b0d62f323ca5dab42b0bc028c52e310ebdd13e655e8fac070fe622bad7852c2b F test/altertab2.test b0d62f323ca5dab42b0bc028c52e310ebdd13e655e8fac070fe622bad7852c2b
F test/altertab3.test 2b82fa2236a3a91553d53ae5555d8e723c7eec174c41f1fa62ff497355398479 F test/altertab3.test 2b82fa2236a3a91553d53ae5555d8e723c7eec174c41f1fa62ff497355398479
F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
@@ -692,7 +692,7 @@ F test/attach2.test 256bd240da1835fb8408dd59fb7ef71f8358c7a756c46662434d11d07ba3
F test/attach3.test c59d92791070c59272e00183b7353eeb94915976 F test/attach3.test c59d92791070c59272e00183b7353eeb94915976
F test/attach4.test 00e754484859998d124d144de6d114d920f2ed6ca2f961e6a7f4183c714f885e F test/attach4.test 00e754484859998d124d144de6d114d920f2ed6ca2f961e6a7f4183c714f885e
F test/attachmalloc.test 12c4f028e570acf9e0a4b0b7fe6f536e21f3d5ebddcece423603d0569beaf438 F test/attachmalloc.test 12c4f028e570acf9e0a4b0b7fe6f536e21f3d5ebddcece423603d0569beaf438
F test/auth.test 2154625c05bc79f0e0ea72cb2358395a8041243caa0fd7ce7617d50da4331794 F test/auth.test 567d917e0baddb6d0026a251cff977a3ab2c805a3cef906ba8653aafe7ad7240
F test/auth2.test 9eb7fce9f34bf1f50d3f366fb3e606be5a2000a1 F test/auth2.test 9eb7fce9f34bf1f50d3f366fb3e606be5a2000a1
F test/auth3.test db21405b95257c24d29273b6b31d0efc59e1d337e3d5804ba2d1fd4897b1ae49 F test/auth3.test db21405b95257c24d29273b6b31d0efc59e1d337e3d5804ba2d1fd4897b1ae49
F test/autoanalyze1.test b9cc3f32a990fa56669b668d237c6d53e983554ae80c0604992e18869a0b2dec F test/autoanalyze1.test b9cc3f32a990fa56669b668d237c6d53e983554ae80c0604992e18869a0b2dec
@@ -804,7 +804,7 @@ F test/corruptJ.test 4d5ccc4bf959464229a836d60142831ef76a5aa4
F test/corruptK.test 5b4212fe346699831c5ad559a62c54e11c0611bdde1ea8423a091f9c01aa32af F test/corruptK.test 5b4212fe346699831c5ad559a62c54e11c0611bdde1ea8423a091f9c01aa32af
F test/corruptL.test df132ba9ffd6fa15038380b4154998b9904ab8f1ea78400d7da53c920cb3b13d F test/corruptL.test df132ba9ffd6fa15038380b4154998b9904ab8f1ea78400d7da53c920cb3b13d
F test/corruptM.test 7d574320e08c1b36caa3e47262061f186367d593a7e305d35f15289cc2c3e067 F test/corruptM.test 7d574320e08c1b36caa3e47262061f186367d593a7e305d35f15289cc2c3e067
F test/corruptN.test f56e3417fe9a444efd765ae55acbe65595d7b8f747785fe0fd785dbdc424932a F test/corruptN.test c2a96ff81386027f7d7e95858783aa36f82ba1532106969575e3c8f90903a5bb
F test/cost.test b11cdbf9f11ffe8ef99c9881bf390e61fe92baf2182bad1dbe6de59a7295c576 F test/cost.test b11cdbf9f11ffe8ef99c9881bf390e61fe92baf2182bad1dbe6de59a7295c576
F test/count.test 5364003488249957750a5f15ee42ca1cd7b100b1131c2dc71fff266a1250bf55 F test/count.test 5364003488249957750a5f15ee42ca1cd7b100b1131c2dc71fff266a1250bf55
F test/countofview.test e17d6e6688cf74f22783c9ec6e788c0790ee4fbbaee713affd00b1ac0bb39b86 F test/countofview.test e17d6e6688cf74f22783c9ec6e788c0790ee4fbbaee713affd00b1ac0bb39b86
@@ -865,7 +865,7 @@ F test/e_fts3.test 17ba7c373aba4d4f5696ba147ee23fd1a1ef70782af050e03e262ca187c5e
F test/e_insert.test f02f7f17852b2163732c6611d193f84fc67bc641fb4882c77a464076e5eba80e F test/e_insert.test f02f7f17852b2163732c6611d193f84fc67bc641fb4882c77a464076e5eba80e
F test/e_reindex.test 2b0e29344497d9a8a999453a003cb476b6b1d2eef2d6c120f83c2d3a429f3164 F test/e_reindex.test 2b0e29344497d9a8a999453a003cb476b6b1d2eef2d6c120f83c2d3a429f3164
F test/e_resolve.test a61751c368b109db73df0f20fc75fb47e166b1d8 F test/e_resolve.test a61751c368b109db73df0f20fc75fb47e166b1d8
F test/e_select.test f9474205669a7736ef725b29cc7ae9e8601919a3d0ffc0ab30745a028f2a4b61 F test/e_select.test c5425a423da06d0494119db8361ebfc6de302929f7546ca596d56224137e0360
F test/e_select2.test aceb80ab927d46fba5ce7586ebabf23e2bb0604f F test/e_select2.test aceb80ab927d46fba5ce7586ebabf23e2bb0604f
F test/e_totalchanges.test b12ee5809d3e63aeb83238dd501a7bca7fd72c10 F test/e_totalchanges.test b12ee5809d3e63aeb83238dd501a7bca7fd72c10
F test/e_update.test f46c2554d915c9197548681e8d8c33a267e84528 F test/e_update.test f46c2554d915c9197548681e8d8c33a267e84528
@@ -1036,7 +1036,7 @@ F test/fts4umlaut.test fcaca4471de7e78c9d1f7e8976e3e8704d7d8ad979d57a739d00f3f75
F test/fts4unicode.test 82a9c16b68ba2f358a856226bb2ee02f81583797bc4744061c54401bf1a0f4c9 F test/fts4unicode.test 82a9c16b68ba2f358a856226bb2ee02f81583797bc4744061c54401bf1a0f4c9
F test/fts4upfrom.test f25835162c989dffd5e2ef91ec24c4848cc9973093e2d492d1c7b32afac1b49d F test/fts4upfrom.test f25835162c989dffd5e2ef91ec24c4848cc9973093e2d492d1c7b32afac1b49d
F test/full.test 6b3c8fb43c6beab6b95438c1675374b95fab245d F test/full.test 6b3c8fb43c6beab6b95438c1675374b95fab245d
F test/func.test f673822636fb8ed618dd2b80230d16e495d19c8f2e2e7d6c22e93e2b3de097ad F test/func.test 77f6ea02c97d9ea64074461d347276a75df22d2cf51045a40f90857569e985f0
F test/func2.test 772d66227e4e6684b86053302e2d74a2500e1e0f F test/func2.test 772d66227e4e6684b86053302e2d74a2500e1e0f
F test/func3.test 2bb0f31ab7baaed690b962a88544d7be6b34fa389364bc36a44e441ed3e3f1e6 F test/func3.test 2bb0f31ab7baaed690b962a88544d7be6b34fa389364bc36a44e441ed3e3f1e6
F test/func4.test 2285fb5792d593fef442358763f0fd9de806eda47dbc7a5934df57ffdc484c31 F test/func4.test 2285fb5792d593fef442358763f0fd9de806eda47dbc7a5934df57ffdc484c31
@@ -1256,7 +1256,7 @@ F test/oserror.test 1fc9746b83d778e70d115049747ba19c7fba154afce7cc165b09feb6ca6a
F test/ossfuzz.c 9636dad2092a05a32110df0ca06713038dd0c43dd89a77dabe4b8b0d71096715 F test/ossfuzz.c 9636dad2092a05a32110df0ca06713038dd0c43dd89a77dabe4b8b0d71096715
F test/ossshell.c f125c5bd16e537a2549aa579b328dd1c59905e7ab1338dfc210e755bb7b69f17 F test/ossshell.c f125c5bd16e537a2549aa579b328dd1c59905e7ab1338dfc210e755bb7b69f17
F test/ovfl.test 199c482696defceacee8c8e0e0ef36da62726b2f F test/ovfl.test 199c482696defceacee8c8e0e0ef36da62726b2f
F test/pager1.test 293c7ad1f19a07e548179b97534c6588249d4e40058b378ea26e75cc84d936f5 F test/pager1.test a4e438c344663ad7f0bf6e880cacae7531bdf7d960db15a3db4751273ecee06d
F test/pager2.test 67b8f40ae98112bcdba1f2b2d03ea83266418c71 F test/pager2.test 67b8f40ae98112bcdba1f2b2d03ea83266418c71
F test/pager3.test 4e9a83d6ca0838d7c602c9eb93d1357562d9059c1e02ffb138a8271020838370 F test/pager3.test 4e9a83d6ca0838d7c602c9eb93d1357562d9059c1e02ffb138a8271020838370
F test/pager4.test a122e9e6925d5b23b31e3dfef8c6a44bbf19590e F test/pager4.test a122e9e6925d5b23b31e3dfef8c6a44bbf19590e
@@ -1862,7 +1862,7 @@ F tool/mkopcodec.tcl d1b6362bd3aa80d5520d4d6f3765badf01f6c43c
F tool/mkopcodeh.tcl 130b88697da6ec5b89b41844d955d08fb62c2552e889dec8c7bcecb28d8f50bd F tool/mkopcodeh.tcl 130b88697da6ec5b89b41844d955d08fb62c2552e889dec8c7bcecb28d8f50bd
F tool/mkopts.tcl 680f785fdb09729fd9ac50632413da4eadbdf9071535e3f26d03795828ab07fa F tool/mkopts.tcl 680f785fdb09729fd9ac50632413da4eadbdf9071535e3f26d03795828ab07fa
F tool/mkpragmatab.tcl 37381569b5a5cd3269e3fdbc08829eb1a5f7c2a8e59ee7be8995127e5ef99e0d F tool/mkpragmatab.tcl 37381569b5a5cd3269e3fdbc08829eb1a5f7c2a8e59ee7be8995127e5ef99e0d
F tool/mkshellc.tcl 70a9978e363b0f3280ca9ce1c46d72563ff479c1930a12a7375e3881b7325712 F tool/mkshellc.tcl 5fe7e518112b262e25726f248c0f33dd153192867453984b6af0a76a88e97cb2
F tool/mksourceid.c 36aa8020014aed0836fd13c51d6dc9219b0df1761d6b5f58ff5b616211b079b9 F tool/mksourceid.c 36aa8020014aed0836fd13c51d6dc9219b0df1761d6b5f58ff5b616211b079b9
F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
F tool/mksqlite3c-noext.tcl 4f7cfef5152b0c91920355cbfc1d608a4ad242cb819f1aea07f6d0274f584a7f F tool/mksqlite3c-noext.tcl 4f7cfef5152b0c91920355cbfc1d608a4ad242cb819f1aea07f6d0274f584a7f
@@ -1878,7 +1878,7 @@ F tool/replace.tcl 60f91e8dd06ab81f74d213ecbd9c9945f32ac048
F tool/restore_jrnl.tcl 6957a34f8f1f0f8285e07536225ec3b292a9024a F tool/restore_jrnl.tcl 6957a34f8f1f0f8285e07536225ec3b292a9024a
F tool/rollback-test.c 9fc98427d1e23e84429d7e6d07d9094fbdec65a5 F tool/rollback-test.c 9fc98427d1e23e84429d7e6d07d9094fbdec65a5
F tool/run-speed-test.sh f95d19fd669b68c4c38b6b475242841d47c66076 F tool/run-speed-test.sh f95d19fd669b68c4c38b6b475242841d47c66076
F tool/showdb.c 6554d4af7690404f5b9242cf0349a74b59cafbda95fcf8f31c36303faf8539da F tool/showdb.c 7cc12c6deeddfe40ba5d948b408730696d8365988da05fcb6b6a90ea4965e2b4
F tool/showjournal.c 5bad7ae8784a43d2b270d953060423b8bd480818 F tool/showjournal.c 5bad7ae8784a43d2b270d953060423b8bd480818
F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564 F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564
F tool/showshm.c a0ab6ec32dd1f11218ca2a4018f8fb875b59414801ab8ceed8b2e69b7b45a809 F tool/showshm.c a0ab6ec32dd1f11218ca2a4018f8fb875b59414801ab8ceed8b2e69b7b45a809
@@ -1928,7 +1928,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P e867d226226dafd850a5cdd1f8d5688b106ee2deee52602b2718bb59dd184742 791473bc6677c2ae76f558082a4b43ca1eaf9895b76624d5b55d58f2af898ff3 P f21a53fb4141eaeca2fb33b25bbadfad4e461b0ed1a3526f54a42316f3dd5d9b 7bd55eee1ac63cf6d5699ce85bc5a29bf51afdf7a80bce44937fa833947a40f4
R 99ae3e94ae18e705aba1af0128a331a1 R 36eb132f78c5514148fa4679afcdeeb6
U dan U drh
Z 88c10b3fb45c5232381240a000a0aa95 Z b8158accb8090ec1215133e4764405b8

View File

@@ -1 +1 @@
f21a53fb4141eaeca2fb33b25bbadfad4e461b0ed1a3526f54a42316f3dd5d9b 92d8f967c9a7e4005c63703af8075b3d2ae5aa43c6b5bc6e599735dc4479bef6

View File

@@ -850,7 +850,11 @@ static int renameUnmapSelectCb(Walker *pWalker, Select *p){
Parse *pParse = pWalker->pParse; Parse *pParse = pWalker->pParse;
int i; int i;
if( pParse->nErr ) return WRC_Abort; if( pParse->nErr ) return WRC_Abort;
if( p->selFlags & SF_View ) return WRC_Prune; if( p->selFlags & (SF_View|SF_CopyCte) ){
testcase( p->selFlags & SF_View );
testcase( p->selFlags & SF_CopyCte );
return WRC_Prune;
}
if( ALWAYS(p->pEList) ){ if( ALWAYS(p->pEList) ){
ExprList *pList = p->pEList; ExprList *pList = p->pEList;
for(i=0; i<pList->nExpr; i++){ for(i=0; i<pList->nExpr; i++){
@@ -958,7 +962,11 @@ static RenameToken *renameTokenFind(
** descend into sub-select statements. ** descend into sub-select statements.
*/ */
static int renameColumnSelectCb(Walker *pWalker, Select *p){ static int renameColumnSelectCb(Walker *pWalker, Select *p){
if( p->selFlags & SF_View ) return WRC_Prune; if( p->selFlags & (SF_View|SF_CopyCte) ){
testcase( p->selFlags & SF_View );
testcase( p->selFlags & SF_CopyCte );
return WRC_Prune;
}
renameWalkWith(pWalker, p); renameWalkWith(pWalker, p);
return WRC_Continue; return WRC_Continue;
} }
@@ -1152,13 +1160,13 @@ static int renameEditSql(
const char *zNew, /* New token text */ const char *zNew, /* New token text */
int bQuote /* True to always quote token */ int bQuote /* True to always quote token */
){ ){
int nNew = sqlite3Strlen30(zNew); i64 nNew = sqlite3Strlen30(zNew);
int nSql = sqlite3Strlen30(zSql); i64 nSql = sqlite3Strlen30(zSql);
sqlite3 *db = sqlite3_context_db_handle(pCtx); sqlite3 *db = sqlite3_context_db_handle(pCtx);
int rc = SQLITE_OK; int rc = SQLITE_OK;
char *zQuot = 0; char *zQuot = 0;
char *zOut; char *zOut;
int nQuot = 0; i64 nQuot = 0;
char *zBuf1 = 0; char *zBuf1 = 0;
char *zBuf2 = 0; char *zBuf2 = 0;
@@ -1594,7 +1602,11 @@ static int renameTableSelectCb(Walker *pWalker, Select *pSelect){
int i; int i;
RenameCtx *p = pWalker->u.pRename; RenameCtx *p = pWalker->u.pRename;
SrcList *pSrc = pSelect->pSrc; SrcList *pSrc = pSelect->pSrc;
if( pSelect->selFlags & SF_View ) return WRC_Prune; if( pSelect->selFlags & (SF_View|SF_CopyCte) ){
testcase( pSelect->selFlags & SF_View );
testcase( pSelect->selFlags & SF_CopyCte );
return WRC_Prune;
}
if( NEVER(pSrc==0) ){ if( NEVER(pSrc==0) ){
assert( pWalker->pParse->db->mallocFailed ); assert( pWalker->pParse->db->mallocFailed );
return WRC_Abort; return WRC_Abort;

View File

@@ -4362,7 +4362,7 @@ void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ifExists){
if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){ if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
goto exit_drop_index; goto exit_drop_index;
} }
if( !OMIT_TEMPDB && iDb ) code = SQLITE_DROP_TEMP_INDEX; if( !OMIT_TEMPDB && iDb==1 ) code = SQLITE_DROP_TEMP_INDEX;
if( sqlite3AuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){ if( sqlite3AuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){
goto exit_drop_index; goto exit_drop_index;
} }

View File

@@ -1316,10 +1316,10 @@ static void trimFunc(
){ ){
const unsigned char *zIn; /* Input string */ const unsigned char *zIn; /* Input string */
const unsigned char *zCharSet; /* Set of characters to trim */ const unsigned char *zCharSet; /* Set of characters to trim */
int nIn; /* Number of bytes in input */ unsigned int nIn; /* Number of bytes in input */
int flags; /* 1: trimleft 2: trimright 3: trim */ int flags; /* 1: trimleft 2: trimright 3: trim */
int i; /* Loop counter */ int i; /* Loop counter */
unsigned char *aLen = 0; /* Length of each character in zCharSet */ unsigned int *aLen = 0; /* Length of each character in zCharSet */
unsigned char **azChar = 0; /* Individual characters in zCharSet */ unsigned char **azChar = 0; /* Individual characters in zCharSet */
int nChar; /* Number of characters in zCharSet */ int nChar; /* Number of characters in zCharSet */
@@ -1328,13 +1328,13 @@ static void trimFunc(
} }
zIn = sqlite3_value_text(argv[0]); zIn = sqlite3_value_text(argv[0]);
if( zIn==0 ) return; if( zIn==0 ) return;
nIn = sqlite3_value_bytes(argv[0]); nIn = (unsigned)sqlite3_value_bytes(argv[0]);
assert( zIn==sqlite3_value_text(argv[0]) ); assert( zIn==sqlite3_value_text(argv[0]) );
if( argc==1 ){ if( argc==1 ){
static const unsigned char lenOne[] = { 1 }; static const unsigned lenOne[] = { 1 };
static unsigned char * const azOne[] = { (u8*)" " }; static unsigned char * const azOne[] = { (u8*)" " };
nChar = 1; nChar = 1;
aLen = (u8*)lenOne; aLen = (unsigned*)lenOne;
azChar = (unsigned char **)azOne; azChar = (unsigned char **)azOne;
zCharSet = 0; zCharSet = 0;
}else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){ }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
@@ -1345,15 +1345,16 @@ static void trimFunc(
SQLITE_SKIP_UTF8(z); SQLITE_SKIP_UTF8(z);
} }
if( nChar>0 ){ if( nChar>0 ){
azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1)); azChar = contextMalloc(context,
((i64)nChar)*(sizeof(char*)+sizeof(unsigned)));
if( azChar==0 ){ if( azChar==0 ){
return; return;
} }
aLen = (unsigned char*)&azChar[nChar]; aLen = (unsigned*)&azChar[nChar];
for(z=zCharSet, nChar=0; *z; nChar++){ for(z=zCharSet, nChar=0; *z; nChar++){
azChar[nChar] = (unsigned char *)z; azChar[nChar] = (unsigned char *)z;
SQLITE_SKIP_UTF8(z); SQLITE_SKIP_UTF8(z);
aLen[nChar] = (u8)(z - azChar[nChar]); aLen[nChar] = (unsigned)(z - azChar[nChar]);
} }
} }
} }
@@ -1361,7 +1362,7 @@ static void trimFunc(
flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context)); flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
if( flags & 1 ){ if( flags & 1 ){
while( nIn>0 ){ while( nIn>0 ){
int len = 0; unsigned int len = 0;
for(i=0; i<nChar; i++){ for(i=0; i<nChar; i++){
len = aLen[i]; len = aLen[i];
if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break; if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
@@ -1373,7 +1374,7 @@ static void trimFunc(
} }
if( flags & 2 ){ if( flags & 2 ){
while( nIn>0 ){ while( nIn>0 ){
int len = 0; unsigned int len = 0;
for(i=0; i<nChar; i++){ for(i=0; i<nChar; i++){
len = aLen[i]; len = aLen[i];
if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break; if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;

View File

@@ -4312,7 +4312,7 @@ int sqlite3_test_control(int op, ...){
break; break;
} }
#ifdef SQLITE_DEBUG #if defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_WSD)
/* sqlite3_test_control(SQLITE_TESTCTRL_TUNE, id, *piValue) /* sqlite3_test_control(SQLITE_TESTCTRL_TUNE, id, *piValue)
** **
** If "id" is an integer between 1 and SQLITE_NTUNE then set the value ** If "id" is an integer between 1 and SQLITE_NTUNE then set the value

View File

@@ -861,7 +861,9 @@ end_deserialize:
*/ */
int sqlite3MemdbInit(void){ int sqlite3MemdbInit(void){
sqlite3_vfs *pLower = sqlite3_vfs_find(0); sqlite3_vfs *pLower = sqlite3_vfs_find(0);
unsigned int sz = pLower->szOsFile; unsigned int sz;
if( NEVER(pLower==0) ) return SQLITE_ERROR;
sz = pLower->szOsFile;
memdb_vfs.pAppData = pLower; memdb_vfs.pAppData = pLower;
/* The following conditional can only be true when compiled for /* The following conditional can only be true when compiled for
** Windows x86 and SQLITE_MAX_MMAP_SIZE=0. We always leave ** Windows x86 and SQLITE_MAX_MMAP_SIZE=0. We always leave

View File

@@ -8068,6 +8068,7 @@ int sqlite3_os_init(void){
} }
unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1);
#ifndef SQLITE_OMIT_WAL
/* Validate lock assumptions */ /* Validate lock assumptions */
assert( SQLITE_SHM_NLOCK==8 ); /* Number of available locks */ assert( SQLITE_SHM_NLOCK==8 ); /* Number of available locks */
assert( UNIX_SHM_BASE==120 ); /* Start of locking area */ assert( UNIX_SHM_BASE==120 ); /* Start of locking area */
@@ -8083,6 +8084,8 @@ int sqlite3_os_init(void){
** DMS UNIX_SHM_BASE+8 128 ** DMS UNIX_SHM_BASE+8 128
*/ */
assert( UNIX_SHM_DMS==128 ); /* Byte offset of the deadman-switch */ assert( UNIX_SHM_DMS==128 ); /* Byte offset of the deadman-switch */
#endif
return SQLITE_OK; return SQLITE_OK;
} }

View File

@@ -76,11 +76,16 @@ void sqlite3_randomness(int N, void *pBuf){
** number generator) not as an encryption device. ** number generator) not as an encryption device.
*/ */
if( !wsdPrng.isInit ){ if( !wsdPrng.isInit ){
sqlite3_vfs *pVfs = sqlite3_vfs_find(0);
int i; int i;
char k[256]; char k[256];
wsdPrng.j = 0; wsdPrng.j = 0;
wsdPrng.i = 0; wsdPrng.i = 0;
sqlite3OsRandomness(sqlite3_vfs_find(0), 256, k); if( NEVER(pVfs==0) ){
memset(k, 0, sizeof(k));
}else{
sqlite3OsRandomness(pVfs, 256, k);
}
for(i=0; i<256; i++){ for(i=0; i<256; i++){
wsdPrng.s[i] = (u8)i; wsdPrng.s[i] = (u8)i;
} }

View File

@@ -5208,6 +5208,7 @@ static int resolveFromTermToCte(
pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid; pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid;
pFrom->pSelect = sqlite3SelectDup(db, pCte->pSelect, 0); pFrom->pSelect = sqlite3SelectDup(db, pCte->pSelect, 0);
if( db->mallocFailed ) return 2; if( db->mallocFailed ) return 2;
pFrom->pSelect->selFlags |= SF_CopyCte;
assert( pFrom->pSelect ); assert( pFrom->pSelect );
pFrom->fg.isCte = 1; pFrom->fg.isCte = 1;
pFrom->u2.pCteUse = pCteUse; pFrom->u2.pCteUse = pCteUse;

View File

@@ -226,6 +226,7 @@ static sqlite3_int64 timeOfDay(void){
static sqlite3_vfs *clockVfs = 0; static sqlite3_vfs *clockVfs = 0;
sqlite3_int64 t; sqlite3_int64 t;
if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0); if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0);
if( clockVfs==0 ) return 0; /* Never actually happens */
if( clockVfs->iVersion>=2 && clockVfs->xCurrentTimeInt64!=0 ){ if( clockVfs->iVersion>=2 && clockVfs->xCurrentTimeInt64!=0 ){
clockVfs->xCurrentTimeInt64(clockVfs, &t); clockVfs->xCurrentTimeInt64(clockVfs, &t);
}else{ }else{

View File

@@ -4379,17 +4379,17 @@ typedef struct sqlite3_context sqlite3_context;
** **
** ^The fifth argument to the BLOB and string binding interfaces controls ** ^The fifth argument to the BLOB and string binding interfaces controls
** or indicates the lifetime of the object referenced by the third parameter. ** or indicates the lifetime of the object referenced by the third parameter.
** ^These three options exist: ** These three options exist:
** ^(1) A destructor to dispose of the BLOB or string after SQLite has finished ** ^ (1) A destructor to dispose of the BLOB or string after SQLite has finished
** with it may be passed. ^It is called to dispose of the BLOB or string even ** with it may be passed. ^It is called to dispose of the BLOB or string even
** if the call to the bind API fails, except the destructor is not called if ** if the call to the bind API fails, except the destructor is not called if
** the third parameter is a NULL pointer or the fourth parameter is negative. ** the third parameter is a NULL pointer or the fourth parameter is negative.
** ^(2) The special constant, [SQLITE_STATIC], may be passsed to indicate that ** ^ (2) The special constant, [SQLITE_STATIC], may be passsed to indicate that
** the application remains responsible for disposing of the object. ^In this ** the application remains responsible for disposing of the object. ^In this
** case, the object and the provided pointer to it must remain valid until ** case, the object and the provided pointer to it must remain valid until
** either the prepared statement is finalized or the same SQL parameter is ** either the prepared statement is finalized or the same SQL parameter is
** bound to something else, whichever occurs sooner. ** bound to something else, whichever occurs sooner.
** ^(3) The constant, [SQLITE_TRANSIENT], may be passed to indicate that the ** ^ (3) The constant, [SQLITE_TRANSIENT], may be passed to indicate that the
** object is to be copied prior to the return from sqlite3_bind_*(). ^The ** object is to be copied prior to the return from sqlite3_bind_*(). ^The
** object and pointer to it must remain valid until then. ^SQLite will then ** object and pointer to it must remain valid until then. ^SQLite will then
** manage the lifetime of its private copy. ** manage the lifetime of its private copy.

View File

@@ -3233,6 +3233,7 @@ struct Select {
#define SF_UpdateFrom 0x0800000 /* Statement is an UPDATE...FROM */ #define SF_UpdateFrom 0x0800000 /* Statement is an UPDATE...FROM */
#define SF_PushDown 0x1000000 /* SELECT has be modified by push-down opt */ #define SF_PushDown 0x1000000 /* SELECT has be modified by push-down opt */
#define SF_MultiPart 0x2000000 /* Has multiple incompatible PARTITIONs */ #define SF_MultiPart 0x2000000 /* Has multiple incompatible PARTITIONs */
#define SF_CopyCte 0x4000000 /* SELECT statement is a copy of a CTE */
/* /*
** The results of a SELECT can be distributed in several ways, as defined ** The results of a SELECT can be distributed in several ways, as defined

View File

@@ -1073,8 +1073,9 @@ static void vdbeSorterWorkDebug(SortSubtask *pTask, const char *zEvent){
fprintf(stderr, "%lld:%d %s\n", t, iTask, zEvent); fprintf(stderr, "%lld:%d %s\n", t, iTask, zEvent);
} }
static void vdbeSorterRewindDebug(const char *zEvent){ static void vdbeSorterRewindDebug(const char *zEvent){
i64 t; i64 t = 0;
sqlite3OsCurrentTimeInt64(sqlite3_vfs_find(0), &t); sqlite3_vfs *pVfs = sqlite3_vfs_find(0);
if( ALWAYS(pVfs) ) sqlite3OsCurrentTimeInt64(pVfs, &t);
fprintf(stderr, "%lld:X %s\n", t, zEvent); fprintf(stderr, "%lld:X %s\n", t, zEvent);
} }
static void vdbeSorterPopulateDebug( static void vdbeSorterPopulateDebug(

View File

@@ -2719,7 +2719,7 @@ static int whereLoopAddBtreeIndex(
tRowcnt nOut = 0; tRowcnt nOut = 0;
if( nInMul==0 if( nInMul==0
&& pProbe->nSample && pProbe->nSample
&& pNew->u.btree.nEq<=pProbe->nSampleCol && ALWAYS(pNew->u.btree.nEq<=pProbe->nSampleCol)
&& ((eOp & WO_IN)==0 || !ExprHasProperty(pTerm->pExpr, EP_xIsSelect)) && ((eOp & WO_IN)==0 || !ExprHasProperty(pTerm->pExpr, EP_xIsSelect))
&& OptimizationEnabled(db, SQLITE_Stat4) && OptimizationEnabled(db, SQLITE_Stat4)
){ ){

View File

@@ -949,4 +949,23 @@ do_execsql_test 30.2 {
END} END}
} }
#-------------------------------------------------------------------------
reset_db
do_execsql_test 31.0 {
CREATE TABLE t1(q);
CREATE VIEW vvv AS WITH x AS (WITH y AS (SELECT * FROM x) SELECT 1) SELECT 1;
}
do_execsql_test 31.1 {
SELECT * FROM vvv;
} {1}
do_execsql_test 31.2 {
ALTER TABLE t1 RENAME TO t1x;
}
do_execsql_test 31.3 {
ALTER TABLE t1x RENAME q TO x;
}
finish_test finish_test

View File

@@ -1391,9 +1391,23 @@ do_test auth-1.205 {
} }
catchsql {DROP INDEX i2} catchsql {DROP INDEX i2}
} {1 {not authorized}} } {1 {not authorized}}
do_test auth-1.206 { do_test auth-1.205a {
set ::authargs set ::authargs
} {i2 t2 main {}} } {i2 t2 main {}}
db eval {
ATTACH ':memory:' as di205;
CREATE TABLE di205.t1(x);
CREATE INDEX di205.t1x ON t1(x);
}
do_catchsql_test auth-1.205b {
DROP INDEX di205.t1x;
} {1 {not authorized}}
db eval {
DETACH di205;
}
do_test auth-1.206 {
set ::authargs
} {t1x t1 di205 {}}
do_test auth-1.207 { do_test auth-1.207 {
execsql {SELECT name FROM sqlite_master} execsql {SELECT name FROM sqlite_master}
} {t2 i2} } {t2 i2}

View File

@@ -209,12 +209,18 @@ ifcapable json1&&vtab {
WHERE type='index'; WHERE type='index';
} }
db close # Do not run this tests if there is any presql (SQL run from within
sqlite3 db test.db # the [sqlite3] command) configured. In this case the schema is parsed
# before the "PRAGMA writable_schema" command is executed and the
# script throws and exception.
if {[info exists ::G(perm:presql)]==0 || $::G(perm:presql)==""} {
db close
sqlite3 db test.db
do_execsql_test 5.1 { do_execsql_test 5.1 {
PRAGMA writable_schema = 1; PRAGMA writable_schema = 1;
SELECT * FROM t1 SELECT * FROM t1
}
} }
}; # ifcapable json1&&vtab }; # ifcapable json1&&vtab

View File

@@ -1004,12 +1004,13 @@ do_execsql_test e_select-4.9.0 {
INSERT INTO b3 VALUES('dEF', 'dEF'); INSERT INTO b3 VALUES('dEF', 'dEF');
} {} } {}
# EVIDENCE-OF: R-07284-35990 If the SELECT statement is an aggregate # EVIDENCE-OF: R-40855-36147 If the SELECT statement is an aggregate
# query with a GROUP BY clause, then each of the expressions specified # query with a GROUP BY clause, then each of the expressions specified
# as part of the GROUP BY clause is evaluated for each row of the # as part of the GROUP BY clause is evaluated for each row of the
# dataset. Each row is then assigned to a "group" based on the results; # dataset according to the processing rules stated below for ORDER BY
# rows for which the results of evaluating the GROUP BY expressions are # expressions. Each row is then assigned to a "group" based on the
# the same get assigned to the same group. # results; rows for which the results of evaluating the GROUP BY
# expressions are the same get assigned to the same group.
# #
# These tests also show that the following is not untrue: # These tests also show that the following is not untrue:
# #

View File

@@ -1111,6 +1111,13 @@ do_test func-22.22 {
execsql {SELECT typeof(trim('hello',NULL));} execsql {SELECT typeof(trim('hello',NULL));}
} {null} } {null}
# 2021-06-15 - infinite loop due to unsigned character counter
# overflow, reported by Zimuzo Ezeozue
#
do_execsql_test func-22.23 {
SELECT trim('xyzzy',x'c0808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080');
} {xyzzy}
# This is to test the deprecated sqlite3_aggregate_count() API. # This is to test the deprecated sqlite3_aggregate_count() API.
# #
ifcapable deprecated { ifcapable deprecated {

View File

@@ -1764,6 +1764,12 @@ tv delete
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# Test specal "PRAGMA journal_mode=OFF" test cases. # Test specal "PRAGMA journal_mode=OFF" test cases.
# #
# Do not run these tests for SQLITE_ENABLE_ZIPVFS builds. Such builds
# cause the pager to enter the error state if a statement transaction
# cannot be rolled back due to a prior "PRAGMA journal_mode=OFF". Which
# causes these tests to fail.
#
if {[info commands zip_register]==""} {
faultsim_delete_and_reopen faultsim_delete_and_reopen
do_execsql_test pager1-14.1.1 { do_execsql_test pager1-14.1.1 {
PRAGMA journal_mode = OFF; PRAGMA journal_mode = OFF;
@@ -1788,8 +1794,11 @@ do_catchsql_test pager1-14.1.4 {
} {1 {UNIQUE constraint failed: t1.rowid}} } {1 {UNIQUE constraint failed: t1.rowid}}
do_execsql_test pager1-14.1.5 { do_execsql_test pager1-14.1.5 {
COMMIT; COMMIT;
}
do_execsql_test pager1-14.1.6 {
SELECT * FROM t1; SELECT * FROM t1;
} {1 2 2 2} } {1 2 2 2}
}
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# Test opening and closing the pager sub-system with different values # Test opening and closing the pager sub-system with different values

View File

@@ -11,6 +11,7 @@
# #
set topdir [file dir [file dir [file normal $argv0]]] set topdir [file dir [file dir [file normal $argv0]]]
set out stdout set out stdout
fconfigure stdout -translation binary
puts $out {/* DO NOT EDIT! puts $out {/* DO NOT EDIT!
** This file is automatically generated by the script in the canonical ** This file is automatically generated by the script in the canonical
** SQLite source tree at tool/mkshellc.tcl. That script combines source ** SQLite source tree at tool/mkshellc.tcl. That script combines source

View File

@@ -753,7 +753,7 @@ static void decode_trunk_page(
n = decodeInt32(&a[4]); n = decodeInt32(&a[4]);
for(i=0; i<n && i<g.pagesize/4; i++){ for(i=0; i<n && i<g.pagesize/4; i++){
u32 x = decodeInt32(&a[8+4*i]); u32 x = decodeInt32(&a[8+4*i]);
char zIdx[10]; char zIdx[13];
sprintf(zIdx, "[%d]", i); sprintf(zIdx, "[%d]", i);
printf(" %5s %7u", zIdx, x); printf(" %5s %7u", zIdx, x);
if( i%5==4 ) printf("\n"); if( i%5==4 ) printf("\n");