mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Merge version 3.49.0 into the bedrock branch.
FossilOrigin-Name: cc3ce784b0feea2f7e86960d262a04c555df817192695d5760c2a83fb804a212
This commit is contained in:
@@ -196,6 +196,30 @@ APIs must not use `[file normalize]`, but autosetup provides a
|
|||||||
TCL-only implementation of `[file-normalize]` (note the dash) for
|
TCL-only implementation of `[file-normalize]` (note the dash) for
|
||||||
portable use in the configure script.
|
portable use in the configure script.
|
||||||
|
|
||||||
|
Known TCL Incompatibilities
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
A summary of known incompatibilities in JimTCL
|
||||||
|
|
||||||
|
- **CRNL line endings**: prior to 2025-02-05 `fconfigure -translation ...`
|
||||||
|
was a no-op in JimTCL, and it emits CRNL line endings by default on
|
||||||
|
Windows. Since then, it supports `-translation binary`, which is
|
||||||
|
close enough to `-translation lf` for our purposes. When working
|
||||||
|
with files using the `open` command, it is important to use mode
|
||||||
|
`"rb"` or `"wb"`, as appropriate, so that the output does not get
|
||||||
|
CRNL-mangled on Windows.
|
||||||
|
|
||||||
|
- **`file copy`** does not support multiple source files. See
|
||||||
|
[](/info/61f18c96183867fe) for a workaround.
|
||||||
|
|
||||||
|
- **Regular expressions**:
|
||||||
|
|
||||||
|
- Patterns treat `\nnn` octal values as back-references (which it
|
||||||
|
does not support). Those can be reformulated as demonstrated in
|
||||||
|
[](/info/aeac23359bb681c0).
|
||||||
|
|
||||||
|
- `regsub` does not support the `\y` flag. A workaround is demonstrated
|
||||||
|
in [](/info/c2e5dd791cce3ec4).
|
||||||
|
|
||||||
<a name="conventions"></a>
|
<a name="conventions"></a>
|
||||||
Design Conventions
|
Design Conventions
|
||||||
|
@@ -75,6 +75,9 @@ extern "C" {
|
|||||||
|
|
||||||
#if defined(_WIN32) || defined(WIN32)
|
#if defined(_WIN32) || defined(WIN32)
|
||||||
|
|
||||||
|
#ifndef STDIN_FILENO
|
||||||
|
#define STDIN_FILENO 0
|
||||||
|
#endif
|
||||||
#define HAVE_DLOPEN
|
#define HAVE_DLOPEN
|
||||||
void *dlopen(const char *path, int mode);
|
void *dlopen(const char *path, int mode);
|
||||||
int dlclose(void *handle);
|
int dlclose(void *handle);
|
||||||
@@ -1864,7 +1867,7 @@ int Jim_tclcompatInit(Jim_Interp *interp)
|
|||||||
" $f buffering $v\n"
|
" $f buffering $v\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" -tr* {\n"
|
" -tr* {\n"
|
||||||
"\n"
|
" $f translation $v\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" default {\n"
|
" default {\n"
|
||||||
" return -code error \"fconfigure: unknown option $n\"\n"
|
" return -code error \"fconfigure: unknown option $n\"\n"
|
||||||
@@ -2936,6 +2939,28 @@ static int aio_cmd_buffering(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
|
|||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int aio_cmd_translation(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
|
||||||
|
{
|
||||||
|
enum {OPT_BINARY, OPT_TEXT};
|
||||||
|
static const char * const options[] = {
|
||||||
|
"binary",
|
||||||
|
"text",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
if (Jim_GetEnum(interp, argv[0], options, &opt, NULL, JIM_ERRMSG) != JIM_OK) {
|
||||||
|
return JIM_ERR;
|
||||||
|
}
|
||||||
|
#if defined(_setmode) && defined(O_BINARY)
|
||||||
|
else {
|
||||||
|
AioFile *af = Jim_CmdPrivData(interp);
|
||||||
|
_setmode(af->fh, opt == OPT_BINARY ? O_BINARY : O_TEXT);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return JIM_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static int aio_cmd_readsize(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
|
static int aio_cmd_readsize(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
|
||||||
{
|
{
|
||||||
AioFile *af = Jim_CmdPrivData(interp);
|
AioFile *af = Jim_CmdPrivData(interp);
|
||||||
@@ -3145,6 +3170,13 @@ static const jim_subcmd_type aio_command_table[] = {
|
|||||||
0,
|
0,
|
||||||
2,
|
2,
|
||||||
|
|
||||||
|
},
|
||||||
|
{ "translation",
|
||||||
|
"binary|text",
|
||||||
|
aio_cmd_translation,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
|
||||||
},
|
},
|
||||||
{ "readsize",
|
{ "readsize",
|
||||||
"?size?",
|
"?size?",
|
||||||
@@ -24342,6 +24374,10 @@ int Jim_InteractivePrompt(Jim_Interp *interp)
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
extern int Jim_initjimshInit(Jim_Interp *interp);
|
extern int Jim_initjimshInit(Jim_Interp *interp);
|
||||||
|
|
||||||
@@ -24425,6 +24461,10 @@ int main(int argc, char *const argv[])
|
|||||||
}
|
}
|
||||||
if (retcode != JIM_EXIT) {
|
if (retcode != JIM_EXIT) {
|
||||||
JimSetArgv(interp, 0, NULL);
|
JimSetArgv(interp, 0, NULL);
|
||||||
|
if (!isatty(STDIN_FILENO)) {
|
||||||
|
|
||||||
|
goto eval_stdin;
|
||||||
|
}
|
||||||
retcode = Jim_InteractivePrompt(interp);
|
retcode = Jim_InteractivePrompt(interp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -24447,6 +24487,7 @@ int main(int argc, char *const argv[])
|
|||||||
Jim_SetVariableStr(interp, "argv0", Jim_NewStringObj(interp, argv[1], -1));
|
Jim_SetVariableStr(interp, "argv0", Jim_NewStringObj(interp, argv[1], -1));
|
||||||
JimSetArgv(interp, argc - 2, argv + 2);
|
JimSetArgv(interp, argc - 2, argv + 2);
|
||||||
if (strcmp(argv[1], "-") == 0) {
|
if (strcmp(argv[1], "-") == 0) {
|
||||||
|
eval_stdin:
|
||||||
retcode = Jim_Eval(interp, "eval [info source [stdin read] stdin 1]");
|
retcode = Jim_Eval(interp, "eval [info source [stdin read] stdin 1]");
|
||||||
} else {
|
} else {
|
||||||
retcode = Jim_EvalFile(interp, argv[1]);
|
retcode = Jim_EvalFile(interp, argv[1]);
|
||||||
|
@@ -5787,6 +5787,24 @@ static void fts3EvalRestart(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Expression node pExpr is an MSR phrase. This function restarts pExpr
|
||||||
|
** so that it is a regular phrase query, not an MSR. SQLITE_OK is returned
|
||||||
|
** if successful, or an SQLite error code otherwise.
|
||||||
|
*/
|
||||||
|
int sqlite3Fts3MsrCancel(Fts3Cursor *pCsr, Fts3Expr *pExpr){
|
||||||
|
int rc = SQLITE_OK;
|
||||||
|
if( pExpr->bEof==0 ){
|
||||||
|
i64 iDocid = pExpr->iDocid;
|
||||||
|
fts3EvalRestart(pCsr, pExpr, &rc);
|
||||||
|
while( rc==SQLITE_OK && pExpr->iDocid!=iDocid ){
|
||||||
|
fts3EvalNextRow(pCsr, pExpr, &rc);
|
||||||
|
if( pExpr->bEof ) rc = FTS_CORRUPT_VTAB;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** After allocating the Fts3Expr.aMI[] array for each phrase in the
|
** After allocating the Fts3Expr.aMI[] array for each phrase in the
|
||||||
** expression rooted at pExpr, the cursor iterates through all rows matched
|
** expression rooted at pExpr, the cursor iterates through all rows matched
|
||||||
|
@@ -640,6 +640,7 @@ int sqlite3Fts3MsrIncrNext(
|
|||||||
int sqlite3Fts3EvalPhrasePoslist(Fts3Cursor *, Fts3Expr *, int iCol, char **);
|
int sqlite3Fts3EvalPhrasePoslist(Fts3Cursor *, Fts3Expr *, int iCol, char **);
|
||||||
int sqlite3Fts3MsrOvfl(Fts3Cursor *, Fts3MultiSegReader *, int *);
|
int sqlite3Fts3MsrOvfl(Fts3Cursor *, Fts3MultiSegReader *, int *);
|
||||||
int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr);
|
int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr);
|
||||||
|
int sqlite3Fts3MsrCancel(Fts3Cursor*, Fts3Expr*);
|
||||||
|
|
||||||
/* fts3_tokenize_vtab.c */
|
/* fts3_tokenize_vtab.c */
|
||||||
int sqlite3Fts3InitTok(sqlite3*, Fts3Hash *, void(*xDestroy)(void*));
|
int sqlite3Fts3InitTok(sqlite3*, Fts3Hash *, void(*xDestroy)(void*));
|
||||||
|
@@ -1586,6 +1586,22 @@ static int fts3ExprTermOffsetInit(Fts3Expr *pExpr, int iPhrase, void *ctx){
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** If expression pExpr is a phrase expression that uses an MSR query,
|
||||||
|
** restart it as a regular, non-incremental query. Return SQLITE_OK
|
||||||
|
** if successful, or an SQLite error code otherwise.
|
||||||
|
*/
|
||||||
|
static int fts3ExprRestartIfCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
|
||||||
|
TermOffsetCtx *p = (TermOffsetCtx*)ctx;
|
||||||
|
int rc = SQLITE_OK;
|
||||||
|
UNUSED_PARAMETER(iPhrase);
|
||||||
|
if( pExpr->pPhrase && pExpr->pPhrase->bIncr ){
|
||||||
|
rc = sqlite3Fts3MsrCancel(p->pCsr, pExpr);
|
||||||
|
pExpr->pPhrase->bIncr = 0;
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Implementation of offsets() function.
|
** Implementation of offsets() function.
|
||||||
*/
|
*/
|
||||||
@@ -1622,6 +1638,12 @@ void sqlite3Fts3Offsets(
|
|||||||
sCtx.iDocid = pCsr->iPrevId;
|
sCtx.iDocid = pCsr->iPrevId;
|
||||||
sCtx.pCsr = pCsr;
|
sCtx.pCsr = pCsr;
|
||||||
|
|
||||||
|
/* If a query restart will be required, do it here, rather than later of
|
||||||
|
** after pointers to poslist buffers that may be invalidated by a restart
|
||||||
|
** have been saved. */
|
||||||
|
rc = sqlite3Fts3ExprIterate(pCsr->pExpr, fts3ExprRestartIfCb, (void*)&sCtx);
|
||||||
|
if( rc!=SQLITE_OK ) goto offsets_out;
|
||||||
|
|
||||||
/* Loop through the table columns, appending offset information to
|
/* Loop through the table columns, appending offset information to
|
||||||
** string-buffer res for each column.
|
** string-buffer res for each column.
|
||||||
*/
|
*/
|
||||||
|
@@ -5476,8 +5476,11 @@ static void fts5DoSecureDelete(
|
|||||||
** This is called as part of flushing a delete to disk in 'secure-delete'
|
** This is called as part of flushing a delete to disk in 'secure-delete'
|
||||||
** mode. It edits the segments within the database described by argument
|
** mode. It edits the segments within the database described by argument
|
||||||
** pStruct to remove the entries for term zTerm, rowid iRowid.
|
** pStruct to remove the entries for term zTerm, rowid iRowid.
|
||||||
|
**
|
||||||
|
** Return SQLITE_OK if successful, or an SQLite error code if an error
|
||||||
|
** has occurred. Any error code is also stored in the Fts5Index handle.
|
||||||
*/
|
*/
|
||||||
static void fts5FlushSecureDelete(
|
static int fts5FlushSecureDelete(
|
||||||
Fts5Index *p,
|
Fts5Index *p,
|
||||||
Fts5Structure *pStruct,
|
Fts5Structure *pStruct,
|
||||||
const char *zTerm,
|
const char *zTerm,
|
||||||
@@ -5522,6 +5525,7 @@ static void fts5FlushSecureDelete(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fts5MultiIterFree(pIter);
|
fts5MultiIterFree(pIter);
|
||||||
|
return p->rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5605,8 +5609,9 @@ static void fts5FlushOneHash(Fts5Index *p){
|
|||||||
** using fts5FlushSecureDelete(). */
|
** using fts5FlushSecureDelete(). */
|
||||||
if( bSecureDelete ){
|
if( bSecureDelete ){
|
||||||
if( eDetail==FTS5_DETAIL_NONE ){
|
if( eDetail==FTS5_DETAIL_NONE ){
|
||||||
if( iOff<nDoclist && pDoclist[iOff]==0x00 ){
|
if( iOff<nDoclist && pDoclist[iOff]==0x00
|
||||||
fts5FlushSecureDelete(p, pStruct, zTerm, nTerm, iRowid);
|
&& !fts5FlushSecureDelete(p, pStruct, zTerm, nTerm, iRowid)
|
||||||
|
){
|
||||||
iOff++;
|
iOff++;
|
||||||
if( iOff<nDoclist && pDoclist[iOff]==0x00 ){
|
if( iOff<nDoclist && pDoclist[iOff]==0x00 ){
|
||||||
iOff++;
|
iOff++;
|
||||||
@@ -5615,8 +5620,9 @@ static void fts5FlushOneHash(Fts5Index *p){
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else if( (pDoclist[iOff] & 0x01) ){
|
}else if( (pDoclist[iOff] & 0x01)
|
||||||
fts5FlushSecureDelete(p, pStruct, zTerm, nTerm, iRowid);
|
&& !fts5FlushSecureDelete(p, pStruct, zTerm, nTerm, iRowid)
|
||||||
|
){
|
||||||
if( p->rc!=SQLITE_OK || pDoclist[iOff]==0x01 ){
|
if( p->rc!=SQLITE_OK || pDoclist[iOff]==0x01 ){
|
||||||
iOff++;
|
iOff++;
|
||||||
continue;
|
continue;
|
||||||
|
@@ -2564,10 +2564,12 @@ static void sessionAppendIdent(
|
|||||||
char *zOut = (char *)&p->aBuf[p->nBuf];
|
char *zOut = (char *)&p->aBuf[p->nBuf];
|
||||||
const char *zIn = zStr;
|
const char *zIn = zStr;
|
||||||
*zOut++ = '"';
|
*zOut++ = '"';
|
||||||
|
if( zIn!=0 ){
|
||||||
while( *zIn ){
|
while( *zIn ){
|
||||||
if( *zIn=='"' ) *zOut++ = '"';
|
if( *zIn=='"' ) *zOut++ = '"';
|
||||||
*zOut++ = *(zIn++);
|
*zOut++ = *(zIn++);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
*zOut++ = '"';
|
*zOut++ = '"';
|
||||||
p->nBuf = (int)((u8 *)zOut - p->aBuf);
|
p->nBuf = (int)((u8 *)zOut - p->aBuf);
|
||||||
p->aBuf[p->nBuf] = 0x00;
|
p->aBuf[p->nBuf] = 0x00;
|
||||||
|
@@ -229,14 +229,15 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
|||||||
'*'
|
'*'
|
||||||
]],
|
]],
|
||||||
/**
|
/**
|
||||||
2025-02-03: We do not have a way to automatically clean up
|
We do not have a way to automatically clean up destructors
|
||||||
destructors which are automatically converted from JS functions
|
which are automatically converted from JS functions via the
|
||||||
via the final argument to sqlite3_set_auxdata(). Because of
|
final argument to sqlite3_set_auxdata(). Because of that,
|
||||||
that, it is strongly recommended that clients use
|
automatic function conversion is not supported for this
|
||||||
wasm.installFunction() to create such callbacks, then pass that
|
function. Clients should use wasm.installFunction() to create
|
||||||
pointer to sqlite3_set_auxdata(). Relying on automated
|
such callbacks, then pass that pointer to
|
||||||
conversions here will lead to leaks of JS/WASM proxy functions
|
sqlite3_set_auxdata(). Relying on automated conversions here
|
||||||
because sqlite3_set_auxdata() is frequently called in UDFs.
|
would lead to leaks of JS/WASM proxy functions because
|
||||||
|
sqlite3_set_auxdata() is frequently called in UDFs.
|
||||||
|
|
||||||
The sqlite3.oo1.DB class's onclose handlers can be used for this
|
The sqlite3.oo1.DB class's onclose handlers can be used for this
|
||||||
purpose. For example:
|
purpose. For example:
|
||||||
@@ -252,10 +253,20 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
|||||||
|
|
||||||
Then pass pAuxDtor as the final argument to appropriate
|
Then pass pAuxDtor as the final argument to appropriate
|
||||||
sqlite3_set_auxdata() calls.
|
sqlite3_set_auxdata() calls.
|
||||||
|
|
||||||
|
Note that versions prior to 3.49.0 ostensibly had automatic
|
||||||
|
function conversion here but a typo prevented it from
|
||||||
|
working. Rather than fix it, it was removed because testing the
|
||||||
|
fix brought the huge potential for memory leaks to the
|
||||||
|
forefront.
|
||||||
*/
|
*/
|
||||||
["sqlite3_set_auxdata", undefined, [
|
["sqlite3_set_auxdata", undefined, [
|
||||||
"sqlite3_context*", "int", "*",
|
"sqlite3_context*", "int", "*",
|
||||||
new wasm.xWrap.FuncPtrAdapter({
|
true
|
||||||
|
? "*"
|
||||||
|
: new wasm.xWrap.FuncPtrAdapter({
|
||||||
|
/* If we can find a way to automate their cleanup, JS functions can
|
||||||
|
be auto-converted with this. */
|
||||||
name: 'xDestroyAuxData',
|
name: 'xDestroyAuxData',
|
||||||
signature: 'v(p)',
|
signature: 'v(p)',
|
||||||
contextKey: (argv, argIndex)=>argv[0/* sqlite3_context* */]
|
contextKey: (argv, argIndex)=>argv[0/* sqlite3_context* */]
|
||||||
|
@@ -3445,7 +3445,6 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
|
|||||||
const stack = wasm.pstack.pointer;
|
const stack = wasm.pstack.pointer;
|
||||||
const pAux = wasm.pstack.alloc(4);
|
const pAux = wasm.pstack.alloc(4);
|
||||||
let pAuxDestructed = 0;
|
let pAuxDestructed = 0;
|
||||||
const args = [];
|
|
||||||
const pAuxDtor = wasm.installFunction('v(p)', function(ptr){
|
const pAuxDtor = wasm.installFunction('v(p)', function(ptr){
|
||||||
//log("freeing auxdata");
|
//log("freeing auxdata");
|
||||||
++pAuxDestructed;
|
++pAuxDestructed;
|
||||||
@@ -3457,10 +3456,11 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
|
|||||||
wasm.uninstallFunction(pAuxDtor);
|
wasm.uninstallFunction(pAuxDtor);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
let nAuxSet = 0 /* how many times we set aux data */;
|
||||||
|
let nAuxReused = 0 /* how many times we reused aux data */;
|
||||||
try{
|
try{
|
||||||
db.createFunction("auxtest",{
|
db.createFunction("auxtest",{
|
||||||
xFunc: function(pCx, x, y){
|
xFunc: function(pCx, x, y){
|
||||||
args.push(x);
|
|
||||||
T.assert(wasm.isPtr(pCx));
|
T.assert(wasm.isPtr(pCx));
|
||||||
const localAux = capi.sqlite3_get_auxdata(pCx, 0);
|
const localAux = capi.sqlite3_get_auxdata(pCx, 0);
|
||||||
if( !localAux ){
|
if( !localAux ){
|
||||||
@@ -3469,23 +3469,20 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
|
|||||||
We do not currently an automated way to clean up
|
We do not currently an automated way to clean up
|
||||||
auxdata finalizer functions (the 4th argument to
|
auxdata finalizer functions (the 4th argument to
|
||||||
sqlite3_set_auxdata()) which get automatically
|
sqlite3_set_auxdata()) which get automatically
|
||||||
converted from JS to WASM. Because of that, relying
|
converted from JS to WASM. Because of that, enabling
|
||||||
on automated conversions for those is not
|
automated conversions here would lead to leaks more
|
||||||
recommended. Instead, follow the pattern show in
|
often than not. Instead, follow the pattern show in
|
||||||
this function: use wasm.installFunction() to create
|
this function: use wasm.installFunction() to create
|
||||||
the function, then pass the resulting function
|
the function, then pass the resulting function
|
||||||
pointer this function, and cleanup (at some point)
|
pointer this function, and cleanup (at some point)
|
||||||
using wasm.uninstallFunction().
|
using wasm.uninstallFunction().
|
||||||
*/
|
*/
|
||||||
|
++nAuxSet;
|
||||||
capi.sqlite3_set_auxdata(pCx, 0, pAux, pAuxDtor);
|
capi.sqlite3_set_auxdata(pCx, 0, pAux, pAuxDtor);
|
||||||
}else{
|
}else{
|
||||||
/* This is never actually hit in this example and it's
|
//log("reusing auxdata",localAux);
|
||||||
not entirely clear how to cause it to. The point of
|
|
||||||
this test, however, is to demonstrate that the
|
|
||||||
finalizer impl gets triggered, so we're not going to
|
|
||||||
fret over this at the moment. */
|
|
||||||
//log("seen auxdata",localAux);
|
|
||||||
T.assert(pAux===localAux);
|
T.assert(pAux===localAux);
|
||||||
|
++nAuxReused;
|
||||||
}
|
}
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
@@ -3493,13 +3490,14 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
|
|||||||
db.exec([
|
db.exec([
|
||||||
"create table t(a);",
|
"create table t(a);",
|
||||||
"insert into t(a) values(1),(2),(3);",
|
"insert into t(a) values(1),(2),(3);",
|
||||||
"select auxtest(a,a), auxtest(a,a) from t order by a"
|
"select auxtest(1,a), auxtest(1,a) from t order by a"
|
||||||
]);
|
]);
|
||||||
}finally{
|
}finally{
|
||||||
db.close();
|
db.close();
|
||||||
wasm.pstack.restore(stack);
|
wasm.pstack.restore(stack);
|
||||||
}
|
}
|
||||||
T.assert(6===args.length);
|
T.assert(nAuxSet>0).assert(nAuxReused>0)
|
||||||
|
.assert(6===nAuxReused+nAuxSet);
|
||||||
T.assert(pAuxDestructed>0);
|
T.assert(pAuxDestructed>0);
|
||||||
T.assert(pAuxDtorDestructed);
|
T.assert(pAuxDtorDestructed);
|
||||||
}
|
}
|
||||||
|
49
manifest
49
manifest
@@ -1,5 +1,5 @@
|
|||||||
C If\sSQLite\sis\scompiled\swith\sSQLITE_ENABLE_WAL_BIGHASH\sdefined,\suse\nhash\stables\slarge\senough\sto\sfit\s128K,\sinstead\sof\s4K,\sentries\sin\sthe\s*-shm\sfile.
|
C Merge\sversion\s3.49.0\sinto\sthe\sbedrock\sbranch.
|
||||||
D 2025-02-05T17:52:13.273
|
D 2025-02-06T12:46:51.870
|
||||||
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 e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
|
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
|
||||||
@@ -37,7 +37,7 @@ F autoconf/tea/win/rules.vc 94a18c3e453535459b4a643983acca52fb8756e79055bd2ad4b0
|
|||||||
F autoconf/tea/win/targets.vc 96a25a1fa6e9e9cfb348fd3760a5395b4ce8acafc8ed10f0412937ec200d5dbd
|
F autoconf/tea/win/targets.vc 96a25a1fa6e9e9cfb348fd3760a5395b4ce8acafc8ed10f0412937ec200d5dbd
|
||||||
F autosetup/LICENSE 41a26aebdd2cd185d1e2b210f71b7ce234496979f6b35aef2cbf6b80cbed4ce4
|
F autosetup/LICENSE 41a26aebdd2cd185d1e2b210f71b7ce234496979f6b35aef2cbf6b80cbed4ce4
|
||||||
F autosetup/README.autosetup a78ff8c4a3d2636a4268736672a74bf14a82f42687fcf0631a70c516075c031e
|
F autosetup/README.autosetup a78ff8c4a3d2636a4268736672a74bf14a82f42687fcf0631a70c516075c031e
|
||||||
F autosetup/README.md 2737c4eb44b022a694b1f93fb01c3b6c3a45b4f663e18490c2106643a77b39da
|
F autosetup/README.md b306314e8a87ccf873cb5b2a360c4a27bbf841df5b76f3acbd65322cff165476
|
||||||
F autosetup/autosetup df8b53928b1fe3c67db5bc77c8e1eb8160c1b6a26c370e9a06c68748f803b7e4 x
|
F autosetup/autosetup df8b53928b1fe3c67db5bc77c8e1eb8160c1b6a26c370e9a06c68748f803b7e4 x
|
||||||
F autosetup/autosetup-config.guess dfa101c5e8220e864d5e9c72a85e87110df60260d36cb951ad0a85d6d9eaa463 x
|
F autosetup/autosetup-config.guess dfa101c5e8220e864d5e9c72a85e87110df60260d36cb951ad0a85d6d9eaa463 x
|
||||||
F autosetup/autosetup-config.sub a38fb074d0dece01cf919e9fb534a26011608aa8fa606490864295328526cd73 x
|
F autosetup/autosetup-config.sub a38fb074d0dece01cf919e9fb534a26011608aa8fa606490864295328526cd73 x
|
||||||
@@ -47,7 +47,7 @@ F autosetup/cc-db.tcl 6e0ed90146197a5a05b245e649975c07c548e30926b218ca3e1d4dc034
|
|||||||
F autosetup/cc-lib.tcl 493c5935b5dd3bf9bd4eca89b07c8b1b1a9356d61783035144e21795facf7360
|
F autosetup/cc-lib.tcl 493c5935b5dd3bf9bd4eca89b07c8b1b1a9356d61783035144e21795facf7360
|
||||||
F autosetup/cc-shared.tcl 4f024e94a47f427ba61de1739f6381ef0080210f9fae89112d5c1de1e5460d78
|
F autosetup/cc-shared.tcl 4f024e94a47f427ba61de1739f6381ef0080210f9fae89112d5c1de1e5460d78
|
||||||
F autosetup/cc.tcl c0fcc50ca91deff8741e449ddad05bcd08268bc31177e613a6343bbd1fd3e45f
|
F autosetup/cc.tcl c0fcc50ca91deff8741e449ddad05bcd08268bc31177e613a6343bbd1fd3e45f
|
||||||
F autosetup/jimsh0.c d40e381ea4526a067590e7b91bd4b2efa6d4980d286f908054c647b3df4aee14
|
F autosetup/jimsh0.c 5a74bdbf43c52289e3f482f3b9578db4bd657e88e8fe04b16c564d9fb710540a
|
||||||
F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba
|
F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba
|
||||||
F autosetup/proj.tcl 9adf1539673cef15bff862d9360b479e6920cc2c0d85de707b0ba31c04ce4531
|
F autosetup/proj.tcl 9adf1539673cef15bff862d9360b479e6920cc2c0d85de707b0ba31c04ce4531
|
||||||
F autosetup/sqlite-config.tcl 00af5b9d94d580367bf01984b86397e8d35b74090427def9591a54ded0e1a287
|
F autosetup/sqlite-config.tcl 00af5b9d94d580367bf01984b86397e8d35b74090427def9591a54ded0e1a287
|
||||||
@@ -80,16 +80,16 @@ F ext/fts3/README.content b9078d0843a094d86af0d48dffbff13c906702b4c3558012e67b9c
|
|||||||
F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
|
F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
|
||||||
F ext/fts3/README.tokenizers b92bdeb8b46503f0dd301d364efc5ef59ef9fa8e2758b8e742f39fa93a2e422d
|
F ext/fts3/README.tokenizers b92bdeb8b46503f0dd301d364efc5ef59ef9fa8e2758b8e742f39fa93a2e422d
|
||||||
F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
|
F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
|
||||||
F ext/fts3/fts3.c 9f8ce82bbf4ec0636e6170e58f17b04817fa4c39b2d5126ac06f005d485f6d5e
|
F ext/fts3/fts3.c b840ee915a6fb36571e3fe3c096e8a481a4a9cd8a35199a1b976b132b9f84ad3
|
||||||
F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
|
F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
|
||||||
F ext/fts3/fts3Int.h 968f7d7cae541a6926146e9fd3fb2b2ccbd3845b7890a8ed03de0c06ac776682
|
F ext/fts3/fts3Int.h 2fe7c76dfd7d46dff964d17d3f4c53bca2116cf5d6252552ebbc22e38afdf4e0
|
||||||
F ext/fts3/fts3_aux.c 7eab82a9cf0830f6551ba3abfdbe73ed39e322a4d3940ee82fbf723674ecd9f3
|
F ext/fts3/fts3_aux.c 7eab82a9cf0830f6551ba3abfdbe73ed39e322a4d3940ee82fbf723674ecd9f3
|
||||||
F ext/fts3/fts3_expr.c 365849a2a1185e19028a9db2d9f1ea63efe909a3a6aca7ec86fc26a13a60bd58
|
F ext/fts3/fts3_expr.c 365849a2a1185e19028a9db2d9f1ea63efe909a3a6aca7ec86fc26a13a60bd58
|
||||||
F ext/fts3/fts3_hash.c 8b6e31bfb0844c27dc6092c2620bdb1fca17ed613072db057d96952c6bdb48b7
|
F ext/fts3/fts3_hash.c 8b6e31bfb0844c27dc6092c2620bdb1fca17ed613072db057d96952c6bdb48b7
|
||||||
F ext/fts3/fts3_hash.h 39cf6874dc239d6b4e30479b1975fe5b22a3caaf
|
F ext/fts3/fts3_hash.h 39cf6874dc239d6b4e30479b1975fe5b22a3caaf
|
||||||
F ext/fts3/fts3_icu.c 305ce7fb6036484085b5556a9c8e62acdc7763f0f4cdf5fd538212a9f3720116
|
F ext/fts3/fts3_icu.c 305ce7fb6036484085b5556a9c8e62acdc7763f0f4cdf5fd538212a9f3720116
|
||||||
F ext/fts3/fts3_porter.c e19807ce0ae31c1c6e9898e89ecc93183d7ec224ea101af039722a4f49e5f2b8
|
F ext/fts3/fts3_porter.c e19807ce0ae31c1c6e9898e89ecc93183d7ec224ea101af039722a4f49e5f2b8
|
||||||
F ext/fts3/fts3_snippet.c c38117a2e4dcc9485a170a57a6134423955247b230fef7073c46fa9c51239540
|
F ext/fts3/fts3_snippet.c 7a3d5e2cefbb1cb51fb9c65458670cc269647ede18e1ffd57b513f9b4ec10c3e
|
||||||
F ext/fts3/fts3_term.c 6a96027ad364001432545fe43322b6af04ed28bb5619ec51af1f59d0710d6d69
|
F ext/fts3/fts3_term.c 6a96027ad364001432545fe43322b6af04ed28bb5619ec51af1f59d0710d6d69
|
||||||
F ext/fts3/fts3_test.c 7a9cb3d61774134211bf4bfdf1adcb581a1a0377f2d050a121ae7ab44baef0e3
|
F ext/fts3/fts3_test.c 7a9cb3d61774134211bf4bfdf1adcb581a1a0377f2d050a121ae7ab44baef0e3
|
||||||
F ext/fts3/fts3_tokenize_vtab.c 7fd9ef364f257b97218b9c331f2378e307375c592f70fd541f714e747d944962
|
F ext/fts3/fts3_tokenize_vtab.c 7fd9ef364f257b97218b9c331f2378e307375c592f70fd541f714e747d944962
|
||||||
@@ -114,7 +114,7 @@ F ext/fts5/fts5_buffer.c 0eec58bff585f1a44ea9147eae5da2447292080ea435957f7488c70
|
|||||||
F ext/fts5/fts5_config.c e7d8dd062b44a66cd77e5a0f74f23a2354cd1f3f8575afb967b2773c3384f7f8
|
F ext/fts5/fts5_config.c e7d8dd062b44a66cd77e5a0f74f23a2354cd1f3f8575afb967b2773c3384f7f8
|
||||||
F ext/fts5/fts5_expr.c 69b8d976058512c07dfe86e229521b7a871768157bd1607cedf1a5038dfd72c9
|
F ext/fts5/fts5_expr.c 69b8d976058512c07dfe86e229521b7a871768157bd1607cedf1a5038dfd72c9
|
||||||
F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1
|
F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1
|
||||||
F ext/fts5/fts5_index.c a59ccd06af157da2471f356198af14bc37d86e46231e4e1858b2af2f94c2c6e4
|
F ext/fts5/fts5_index.c f1eec0931548b529ddd7ebd274eaef37de7461fe2b0ebdc9818f37324bdf9494
|
||||||
F ext/fts5/fts5_main.c 47e7a63a936b5573570be299c13e9eaf2651eb25dce41b3e16430142e682e2c8
|
F ext/fts5/fts5_main.c 47e7a63a936b5573570be299c13e9eaf2651eb25dce41b3e16430142e682e2c8
|
||||||
F ext/fts5/fts5_storage.c 1ad05dab4830a4e2eaf2900bb143477f93bc17437093582f36f4b818809e88d8
|
F ext/fts5/fts5_storage.c 1ad05dab4830a4e2eaf2900bb143477f93bc17437093582f36f4b818809e88d8
|
||||||
F ext/fts5/fts5_tcl.c 7fb5a3d3404099075aaa2457307cb459bbc257c0de3dbd52b1e80a5b503e0329
|
F ext/fts5/fts5_tcl.c 7fb5a3d3404099075aaa2457307cb459bbc257c0de3dbd52b1e80a5b503e0329
|
||||||
@@ -623,7 +623,7 @@ F ext/session/sessionstat1.test 5e718d5888c0c49bbb33a7a4f816366db85f59f6a4f97544
|
|||||||
F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc
|
F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc
|
||||||
F ext/session/sqlite3changebatch.c d488b42d8fd49fb013a1e9c4535232680dabeb28ae8f9421b65ea0ccc3b430f7
|
F ext/session/sqlite3changebatch.c d488b42d8fd49fb013a1e9c4535232680dabeb28ae8f9421b65ea0ccc3b430f7
|
||||||
F ext/session/sqlite3changebatch.h e72016998c9a22d439ddfd547b69e1ebac810c24
|
F ext/session/sqlite3changebatch.h e72016998c9a22d439ddfd547b69e1ebac810c24
|
||||||
F ext/session/sqlite3session.c 5a5c46168f4ac3155b422c23dd7299b7663e747cb9f34735e7a10e2146f07b0b
|
F ext/session/sqlite3session.c e33ff7bed8537a2fa6913711fbd4f3defd24c56a400a10da379b8a172bb7fee5
|
||||||
F ext/session/sqlite3session.h 3376dbf372cb00cc0f4e960ca0a0125418638da8c55aad749c9fe7a58a770506
|
F ext/session/sqlite3session.h 3376dbf372cb00cc0f4e960ca0a0125418638da8c55aad749c9fe7a58a770506
|
||||||
F ext/session/test_session.c 3e9a06d0840013d6411fd17bf7948282224d4c54626cda3a1faa39ac89f0c056
|
F ext/session/test_session.c 3e9a06d0840013d6411fd17bf7948282224d4c54626cda3a1faa39ac89f0c056
|
||||||
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
|
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
|
||||||
@@ -646,7 +646,7 @@ F ext/wasm/api/post-js-footer.js 365405929f41ca0e6d389ed8a8da3f3c93e11d3ef43a90a
|
|||||||
F ext/wasm/api/post-js-header.js 54b2b4294501b3866245cc94315a16f5424c0e87729d0fb610fba151593c6d26
|
F ext/wasm/api/post-js-header.js 54b2b4294501b3866245cc94315a16f5424c0e87729d0fb610fba151593c6d26
|
||||||
F ext/wasm/api/pre-js.c-pp.js a614a2c82b12c4d96d8e3ba77330329efc53c4d56a8a7e60ade900f341866cfb
|
F ext/wasm/api/pre-js.c-pp.js a614a2c82b12c4d96d8e3ba77330329efc53c4d56a8a7e60ade900f341866cfb
|
||||||
F ext/wasm/api/sqlite3-api-cleanup.js 3ac1786e461ada63033143be8c3b00b26b939540661f3e839515bb92f2e35359
|
F ext/wasm/api/sqlite3-api-cleanup.js 3ac1786e461ada63033143be8c3b00b26b939540661f3e839515bb92f2e35359
|
||||||
F ext/wasm/api/sqlite3-api-glue.c-pp.js 6e2f2eaf681e342fcb047fcdd01d6e3c1b466fb9b45c1acc38676164a8b60f45
|
F ext/wasm/api/sqlite3-api-glue.c-pp.js 5c0209e6a28164b4c2c1a34b0bb4aee3b7b1a264988d7e71fac08b8ede5b7ae3
|
||||||
F ext/wasm/api/sqlite3-api-oo1.c-pp.js f3a8e2004c6625d17946c11f2fb32008be78bc5207bf746fc77d59848813225f
|
F ext/wasm/api/sqlite3-api-oo1.c-pp.js f3a8e2004c6625d17946c11f2fb32008be78bc5207bf746fc77d59848813225f
|
||||||
F ext/wasm/api/sqlite3-api-prologue.js 5ff913355b3144f1c9719d0406667fa6e13eb813c71ed7ce29440e2e65363e82
|
F ext/wasm/api/sqlite3-api-prologue.js 5ff913355b3144f1c9719d0406667fa6e13eb813c71ed7ce29440e2e65363e82
|
||||||
F ext/wasm/api/sqlite3-api-worker1.c-pp.js 5cc22a3c0d52828cb32aad8691488719f47d27567e63e8bc8b832d74371c352d
|
F ext/wasm/api/sqlite3-api-worker1.c-pp.js 5cc22a3c0d52828cb32aad8691488719f47d27567e63e8bc8b832d74371c352d
|
||||||
@@ -704,7 +704,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555
|
|||||||
F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
|
F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
|
||||||
F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c
|
F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c
|
||||||
F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2
|
F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2
|
||||||
F ext/wasm/tester1.c-pp.js fb8d0761daaa69bd40c8253cc2d6c8c37ada97e1751b7f07af7369842ba2aeae
|
F ext/wasm/tester1.c-pp.js 05a0143c44a4114aad0ed40ce73c528febc3e0d6b69f48a51c895d7030015b74
|
||||||
F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e
|
F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e
|
||||||
F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
|
F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
|
||||||
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
|
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
|
||||||
@@ -741,7 +741,7 @@ F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42
|
|||||||
F src/expr.c 8705be31ee713aaa43c97d91399db09f16ee41b88250406eb99de6b47f550a98
|
F src/expr.c 8705be31ee713aaa43c97d91399db09f16ee41b88250406eb99de6b47f550a98
|
||||||
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
||||||
F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f
|
F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f
|
||||||
F src/func.c 624f4bd5004e3dbd07f97f0e82288798942e4c54c01bbc2aceacca1d08f9caea
|
F src/func.c a0130a089bb8aa8dd642975b0c1713e2684404c3ec8228616e786331ede74217
|
||||||
F src/global.c a19e4b1ca1335f560e9560e590fc13081e21f670643367f99cb9e8f9dc7d615b
|
F src/global.c a19e4b1ca1335f560e9560e590fc13081e21f670643367f99cb9e8f9dc7d615b
|
||||||
F src/hash.c 9ee4269fb1d6632a6fecfb9479c93a1f29271bddbbaf215dd60420bcb80c7220
|
F src/hash.c 9ee4269fb1d6632a6fecfb9479c93a1f29271bddbbaf215dd60420bcb80c7220
|
||||||
F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
|
F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
|
||||||
@@ -790,10 +790,10 @@ F src/resolve.c c8a5372b97b2a2e972a280676f06ddb5b74e885d3b1f5ce383f839907b57ef68
|
|||||||
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
|
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
|
||||||
F src/select.c 96b4e6ed50ec65a372f0beb5d782dbe4776541d6974f80ff8a2538a46d2cae03
|
F src/select.c 96b4e6ed50ec65a372f0beb5d782dbe4776541d6974f80ff8a2538a46d2cae03
|
||||||
F src/shell.c.in b377a59822f207106424f08aead37e78b609222e98f86f04cc8a03563ccf3237
|
F src/shell.c.in b377a59822f207106424f08aead37e78b609222e98f86f04cc8a03563ccf3237
|
||||||
F src/sqlite.h.in df148bd964f83e6953b7c6c03023d7db951422ee66a34b07ece6e57b4bb535f8
|
F src/sqlite.h.in 9ca533745bfbeef8ea40dda62d7054a1dc14bbe6f3067d13729f247f5c54faa4
|
||||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||||
F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
|
F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
|
||||||
F src/sqliteInt.h 2545f879e1c97992c2acc0029632ab41c53b706211b1e599879da7a5b26534ad
|
F src/sqliteInt.h 48e947626cbdfc7d7e0aa0062e9760bd83f57c56c2348efcec37d49350690e71
|
||||||
F src/sqliteLimit.h 1bbdbf72bd0411d003267ffebc59a262f061df5653027a75627d03f48ca30523
|
F src/sqliteLimit.h 1bbdbf72bd0411d003267ffebc59a262f061df5653027a75627d03f48ca30523
|
||||||
F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b
|
F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b
|
||||||
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
|
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
|
||||||
@@ -1298,7 +1298,7 @@ F test/fuzz3.test 70ba57260364b83e964707b9d4b5625284239768ab907dd387c740c0370ce3
|
|||||||
F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634
|
F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634
|
||||||
F test/fuzz_common.tcl b7197de6ed1ee8250a4f82d67876f4561b42ee8cbbfc6160dcb66331bad3f830
|
F test/fuzz_common.tcl b7197de6ed1ee8250a4f82d67876f4561b42ee8cbbfc6160dcb66331bad3f830
|
||||||
F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2
|
F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2
|
||||||
F test/fuzzcheck.c 1671559091b3e134ec807490f624d306b24bd9a8f03b12aa97e292f4b31e5d96
|
F test/fuzzcheck.c 6fc952750a69168dd5fea38b9d35cb38475bfda15c8acfd156ac09cd03ddbd3e
|
||||||
F test/fuzzdata1.db 3e86d9cf5aea68ddb8e27c02d7dfdaa226347426c7eb814918e4d95475bf8517
|
F test/fuzzdata1.db 3e86d9cf5aea68ddb8e27c02d7dfdaa226347426c7eb814918e4d95475bf8517
|
||||||
F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f
|
F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f
|
||||||
F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba
|
F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba
|
||||||
@@ -1306,7 +1306,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4
|
|||||||
F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5
|
F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5
|
||||||
F test/fuzzdata6.db b8725a5f5cf7a3b7241a9038e57ca7e7cc8c3f4d86b44bd770617bda245ab2b0
|
F test/fuzzdata6.db b8725a5f5cf7a3b7241a9038e57ca7e7cc8c3f4d86b44bd770617bda245ab2b0
|
||||||
F test/fuzzdata7.db 0166b56fd7a6b9636a1d60ef0a060f86ddaecf99400a666bb6e5bbd7199ad1f2
|
F test/fuzzdata7.db 0166b56fd7a6b9636a1d60ef0a060f86ddaecf99400a666bb6e5bbd7199ad1f2
|
||||||
F test/fuzzdata8.db 4a53b6d077c6a5c23b609d8d3ac66996fa55ba3f8d02f9b6efdd0214a767a35a
|
F test/fuzzdata8.db c6f9cb7d2b808fb10894afe53ef00f51e73e43baa7aabdba7e9af4713fc5b186
|
||||||
F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8
|
F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8
|
||||||
F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14
|
F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14
|
||||||
F test/fuzzerfault.test f64c4aef4c9e9edf1d6dc0d3f1e65dcc81e67c996403c88d14f09b74807a42bc
|
F test/fuzzerfault.test f64c4aef4c9e9edf1d6dc0d3f1e65dcc81e67c996403c88d14f09b74807a42bc
|
||||||
@@ -2191,9 +2191,9 @@ F tool/mkpragmatab.tcl d03737ad2ac48928d8225d1c571e487b9b7e73e8c1bdcabd61d69b244
|
|||||||
F tool/mkshellc.tcl 9ce74de0fa904a2c56a96f8d8b5261246bacb0eaa8d7e184f9e18ff94145ebbc
|
F tool/mkshellc.tcl 9ce74de0fa904a2c56a96f8d8b5261246bacb0eaa8d7e184f9e18ff94145ebbc
|
||||||
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 351c55256213154cabb051a3c870ef9f4487de905015141ae50dc7578a901b84
|
||||||
F tool/mksqlite3c.tcl 1b24a4388f544a7f42fc2d03f34422182d3b2263453f65f642890259566369c1
|
F tool/mksqlite3c.tcl ba13086555b3cb835eba5e47a9250300ab85304d23fd1081abd3f29d8ab71a2b
|
||||||
F tool/mksqlite3h.tcl 3cc8f3fbb3eca38c899549385622637667254067d865a70ad16e0996c2fd3214
|
F tool/mksqlite3h.tcl b05b85c32295bad3fe64807729693d1f19faed3c464c5faac6c53bb6b972ac2f
|
||||||
F tool/mksqlite3internalh.tcl eb994013e833359137eb53a55acdad0b5ae1049b
|
F tool/mksqlite3internalh.tcl eb994013e833359137eb53a55acdad0b5ae1049b
|
||||||
F tool/mksrczip.tcl 81efd9974dbb36005383f2cd655520057a2ae5aa85ac2441a80c7c28f803ac52
|
F tool/mksrczip.tcl 81efd9974dbb36005383f2cd655520057a2ae5aa85ac2441a80c7c28f803ac52
|
||||||
F tool/mktoolzip.tcl 34b4e92be544f820e2cc26f143f7d5aec511e826ec394cc82969a5dcf7c7a27c
|
F tool/mktoolzip.tcl 34b4e92be544f820e2cc26f143f7d5aec511e826ec394cc82969a5dcf7c7a27c
|
||||||
@@ -2222,7 +2222,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
|||||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||||
F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd
|
F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd
|
||||||
F tool/spellsift.tcl 52b4b04dc4333c7ab024f09d9d66ed6b6f7c6eb00b38497a09f338fa55d40618 x
|
F tool/spellsift.tcl 52b4b04dc4333c7ab024f09d9d66ed6b6f7c6eb00b38497a09f338fa55d40618 x
|
||||||
F tool/split-sqlite3c.tcl 5aa60643afca558bc732b1444ae81a522326f91e1dc5665b369c54f09e20de60
|
F tool/split-sqlite3c.tcl 07e18a1d8cc3f6b3a4a1f3528e63c9b29a5c8a7bca0b8d394b231da464ce1247
|
||||||
F tool/sqldiff.c 2a0987d183027c795ced13d6749061c1d2f38e24eddb428f56fa64c3a8f51e4b
|
F tool/sqldiff.c 2a0987d183027c795ced13d6749061c1d2f38e24eddb428f56fa64c3a8f51e4b
|
||||||
F tool/sqlite3_analyzer.c.in fc7735c499d226a49d843d8209b2543e4e5229eeb71a674c331323a2217b65b4
|
F tool/sqlite3_analyzer.c.in fc7735c499d226a49d843d8209b2543e4e5229eeb71a674c331323a2217b65b4
|
||||||
F tool/sqlite3_rsync.c 9a1cca2ab1271c59b37a6493c15dc1bcd0ab9149197a9125926bc08dd26b83fb
|
F tool/sqlite3_rsync.c 9a1cca2ab1271c59b37a6493c15dc1bcd0ab9149197a9125926bc08dd26b83fb
|
||||||
@@ -2246,9 +2246,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
|
|||||||
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
|
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
|
||||||
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
|
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
|
||||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||||
P 1cef92de5059e468e0b1282425f50b089629c4f74671763bcefcb835798a9124
|
P 581efc34624c55832afbf7b691d768d6ddbf2b23d6a190d2fa0dde1b00251454 e194c8e8c75fcfda263fbf3f51e5236e66221bd245805af95afbf6a60506d247
|
||||||
Q +6e800b7035f55a211917d28cacf829b1681f37cbd2e6989c4cc20d4027a4192d
|
R 56992fcbb164b5791fdc1f26b911a816
|
||||||
R c6b4176b37f2b5dbb7d04a0902a128c8
|
U drh
|
||||||
U dan
|
Z 986ba5a503a9219d62c05c57f7a79dae
|
||||||
Z e6bf5e2637d4942fcd140ab770336bc1
|
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
@@ -1 +1 @@
|
|||||||
581efc34624c55832afbf7b691d768d6ddbf2b23d6a190d2fa0dde1b00251454
|
cc3ce784b0feea2f7e86960d262a04c555df817192695d5760c2a83fb804a212
|
||||||
|
@@ -1871,7 +1871,10 @@ static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){
|
|||||||
assert( p->cnt>0 );
|
assert( p->cnt>0 );
|
||||||
p->cnt--;
|
p->cnt--;
|
||||||
if( !p->approx ){
|
if( !p->approx ){
|
||||||
p->iSum -= sqlite3_value_int64(argv[0]);
|
if( sqlite3SubInt64(&p->iSum, sqlite3_value_int64(argv[0])) ){
|
||||||
|
p->ovrfl = 1;
|
||||||
|
p->approx = 1;
|
||||||
|
}
|
||||||
}else if( type==SQLITE_INTEGER ){
|
}else if( type==SQLITE_INTEGER ){
|
||||||
i64 iVal = sqlite3_value_int64(argv[0]);
|
i64 iVal = sqlite3_value_int64(argv[0]);
|
||||||
if( iVal!=SMALLEST_INT64 ){
|
if( iVal!=SMALLEST_INT64 ){
|
||||||
|
@@ -2211,7 +2211,15 @@ struct sqlite3_mem_methods {
|
|||||||
** CAPI3REF: Database Connection Configuration Options
|
** CAPI3REF: Database Connection Configuration Options
|
||||||
**
|
**
|
||||||
** These constants are the available integer configuration options that
|
** These constants are the available integer configuration options that
|
||||||
** can be passed as the second argument to the [sqlite3_db_config()] interface.
|
** can be passed as the second parameter to the [sqlite3_db_config()] interface.
|
||||||
|
**
|
||||||
|
** The [sqlite3_db_config()] interface is a var-args functions. It takes a
|
||||||
|
** variable number of parameters, though always at least two. The number of
|
||||||
|
** parameters passed into sqlite3_db_config() depends on which of these
|
||||||
|
** constants is given as the second parameter. This documentation page
|
||||||
|
** refers to parameters beyond the second as "arguments". Thus, when this
|
||||||
|
** page says "the N-th argument" it means "the N-th parameter past the
|
||||||
|
** configuration option" or "the (N+2)-th parameter to sqlite3_db_config()".
|
||||||
**
|
**
|
||||||
** New configuration options may be added in future releases of SQLite.
|
** New configuration options may be added in future releases of SQLite.
|
||||||
** Existing configuration options might be discontinued. Applications
|
** Existing configuration options might be discontinued. Applications
|
||||||
@@ -2228,7 +2236,9 @@ struct sqlite3_mem_methods {
|
|||||||
** connection.
|
** connection.
|
||||||
** The arguments to the SQLITE_DBCONFIG_LOOKASIDE option are <i>not</i>
|
** The arguments to the SQLITE_DBCONFIG_LOOKASIDE option are <i>not</i>
|
||||||
** in the [DBCONFIG arguments|usual format].
|
** in the [DBCONFIG arguments|usual format].
|
||||||
** The SQLITE_DBCONFIG_LOOKASIDE option takes three arguments, not two.
|
** The SQLITE_DBCONFIG_LOOKASIDE option takes three arguments, not two,
|
||||||
|
** so that a call to [sqlite3_db_config()] that uses SQLITE_DBCONFIG_LOOKASIDE
|
||||||
|
** should have a total of five parameters.
|
||||||
** ^The first argument (the third parameter to [sqlite3_db_config()] is a
|
** ^The first argument (the third parameter to [sqlite3_db_config()] is a
|
||||||
** pointer to a memory buffer to use for lookaside memory.
|
** pointer to a memory buffer to use for lookaside memory.
|
||||||
** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb
|
** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb
|
||||||
@@ -2330,12 +2340,13 @@ struct sqlite3_mem_methods {
|
|||||||
** <dd> ^This option is used to change the name of the "main" database
|
** <dd> ^This option is used to change the name of the "main" database
|
||||||
** schema. This option does not follow the
|
** schema. This option does not follow the
|
||||||
** [DBCONFIG arguments|usual SQLITE_DBCONFIG argument format].
|
** [DBCONFIG arguments|usual SQLITE_DBCONFIG argument format].
|
||||||
** This option takes exactly one argument, which ust be a pointer
|
** This option takes exactly one additional argument so that the
|
||||||
** to a constant UTF8 string which will become the new schema name
|
** [sqlite3_db_config()] call has a total of three parameters. The
|
||||||
** in place of "main". ^SQLite does not make a copy of the new main
|
** extra argument must be a pointer to a constant UTF8 string which
|
||||||
** schema name string, so the application must ensure that the argument
|
** will become the new schema name in place of "main". ^SQLite does
|
||||||
** passed into SQLITE_DBCONFIG MAINDBNAME is unchanged
|
** not make a copy of the new main schema name string, so the application
|
||||||
** until after the database connection closes.
|
** must ensure that the argument passed into SQLITE_DBCONFIG MAINDBNAME
|
||||||
|
** is unchanged until after the database connection closes.
|
||||||
** </dd>
|
** </dd>
|
||||||
**
|
**
|
||||||
** [[SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE]]
|
** [[SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE]]
|
||||||
@@ -2346,10 +2357,11 @@ struct sqlite3_mem_methods {
|
|||||||
** connection being closed is the last open connection to the database),
|
** connection being closed is the last open connection to the database),
|
||||||
** then SQLite performs a [checkpoint] before closing the connection and
|
** then SQLite performs a [checkpoint] before closing the connection and
|
||||||
** deletes the WAL file. The SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE option can
|
** deletes the WAL file. The SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE option can
|
||||||
** be used to override that behavior. The first parameter passed to this
|
** be used to override that behavior. The first argument passed to this
|
||||||
** operation is an integer - positive to disable checkpoints-on-close, or
|
** operation (the third parameter to [sqlite3_db_config()]) is an integer
|
||||||
** zero (the default) to enable them, and negative to leave the setting unchanged.
|
** which is positive to disable checkpoints-on-close, or zero (the default)
|
||||||
** The second parameter is a pointer to an integer
|
** to enable them, and negative to leave the setting unchanged.
|
||||||
|
** The second argument (the fourth parameter) is a pointer to an integer
|
||||||
** into which is written 0 or 1 to indicate whether checkpoints-on-close
|
** into which is written 0 or 1 to indicate whether checkpoints-on-close
|
||||||
** have been disabled - 0 if they are not disabled, 1 if they are.
|
** have been disabled - 0 if they are not disabled, 1 if they are.
|
||||||
** </dd>
|
** </dd>
|
||||||
@@ -2587,9 +2599,11 @@ struct sqlite3_mem_methods {
|
|||||||
**
|
**
|
||||||
** [[DBCONFIG arguments]] <h3>Arguments To SQLITE_DBCONFIG Options</h3>
|
** [[DBCONFIG arguments]] <h3>Arguments To SQLITE_DBCONFIG Options</h3>
|
||||||
**
|
**
|
||||||
** <p>Most of the SQLITE_DBCONFIG options take two arguments: an integer
|
** <p>Most of the SQLITE_DBCONFIG options take two arguments, so that the
|
||||||
** and a pointer to an integer. If the first integer argument is 1, then
|
** overall call to [sqlite3_db_config()] has a total of four parameters.
|
||||||
** the option becomes enabled. If the first integer argument is 0, then the
|
** The first argument (the third parameter to sqlite3_db_config()) is a integer.
|
||||||
|
** The second argument is a pointer to an integer. If the first argument is 1,
|
||||||
|
** then the option becomes enabled. If the first integer argument is 0, then the
|
||||||
** option is disabled. If the first argument is -1, then the option setting
|
** option is disabled. If the first argument is -1, then the option setting
|
||||||
** is unchanged. The second argument, the pointer to an integer, may be NULL.
|
** is unchanged. The second argument, the pointer to an integer, may be NULL.
|
||||||
** If the second argument is not NULL, then a value of 0 or 1 is written into
|
** If the second argument is not NULL, then a value of 0 or 1 is written into
|
||||||
|
@@ -3942,9 +3942,7 @@ struct Parse {
|
|||||||
int nVtabLock; /* Number of virtual tables to lock */
|
int nVtabLock; /* Number of virtual tables to lock */
|
||||||
#endif
|
#endif
|
||||||
int nHeight; /* Expression tree height of current sub-select */
|
int nHeight; /* Expression tree height of current sub-select */
|
||||||
#ifndef SQLITE_OMIT_EXPLAIN
|
|
||||||
int addrExplain; /* Address of current OP_Explain opcode */
|
int addrExplain; /* Address of current OP_Explain opcode */
|
||||||
#endif
|
|
||||||
VList *pVList; /* Mapping between variable names and numbers */
|
VList *pVList; /* Mapping between variable names and numbers */
|
||||||
Vdbe *pReprepare; /* VM being reprepared (sqlite3Reprepare()) */
|
Vdbe *pReprepare; /* VM being reprepared (sqlite3Reprepare()) */
|
||||||
const char *zTail; /* All SQL text past the last semicolon parsed */
|
const char *zTail; /* All SQL text past the last semicolon parsed */
|
||||||
|
@@ -507,7 +507,8 @@ static void writefileFunc(
|
|||||||
static void blobListLoadFromDb(
|
static void blobListLoadFromDb(
|
||||||
sqlite3 *db, /* Read from this database */
|
sqlite3 *db, /* Read from this database */
|
||||||
const char *zSql, /* Query used to extract the blobs */
|
const char *zSql, /* Query used to extract the blobs */
|
||||||
int onlyId, /* Only load where id is this value */
|
int firstId, /* First sqlid to load */
|
||||||
|
int lastId, /* Last sqlid to load */
|
||||||
int *pN, /* OUT: Write number of blobs loaded here */
|
int *pN, /* OUT: Write number of blobs loaded here */
|
||||||
Blob **ppList /* OUT: Write the head of the blob list here */
|
Blob **ppList /* OUT: Write the head of the blob list here */
|
||||||
){
|
){
|
||||||
@@ -518,8 +519,9 @@ static void blobListLoadFromDb(
|
|||||||
int rc;
|
int rc;
|
||||||
char *z2;
|
char *z2;
|
||||||
|
|
||||||
if( onlyId>0 ){
|
if( firstId>0 ){
|
||||||
z2 = sqlite3_mprintf("%s WHERE rowid=%d", zSql, onlyId);
|
z2 = sqlite3_mprintf("%s WHERE rowid BETWEEN %d AND %d", zSql,
|
||||||
|
firstId, lastId);
|
||||||
}else{
|
}else{
|
||||||
z2 = sqlite3_mprintf("%s", zSql);
|
z2 = sqlite3_mprintf("%s", zSql);
|
||||||
}
|
}
|
||||||
@@ -1836,7 +1838,8 @@ static void showHelp(void){
|
|||||||
"each database, checking for crashes and memory leaks.\n"
|
"each database, checking for crashes and memory leaks.\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
" --cell-size-check Set the PRAGMA cell_size_check=ON\n"
|
" --cell-size-check Set the PRAGMA cell_size_check=ON\n"
|
||||||
" --dbid N Use only the database where dbid=N\n"
|
" --dbid M..N Use only the databases where dbid between M and N\n"
|
||||||
|
" \"M..\" for M and afterwards. Just \"M\" for M only\n"
|
||||||
" --export-db DIR Write databases to files(s) in DIR. Works with --dbid\n"
|
" --export-db DIR Write databases to files(s) in DIR. Works with --dbid\n"
|
||||||
" --export-sql DIR Write SQL to file(s) in DIR. Also works with --sqlid\n"
|
" --export-sql DIR Write SQL to file(s) in DIR. Also works with --sqlid\n"
|
||||||
" --help Show this help text\n"
|
" --help Show this help text\n"
|
||||||
@@ -1861,7 +1864,8 @@ static void showHelp(void){
|
|||||||
" --script Output CLI script instead of running tests\n"
|
" --script Output CLI script instead of running tests\n"
|
||||||
" --skip N Skip the first N test cases\n"
|
" --skip N Skip the first N test cases\n"
|
||||||
" --spinner Use a spinner to show progress\n"
|
" --spinner Use a spinner to show progress\n"
|
||||||
" --sqlid N Use only SQL where sqlid=N\n"
|
" --sqlid M..N Use only SQL where sqlid between M..N\n"
|
||||||
|
" \"M..\" for M and afterwards. Just \"M\" for M only\n"
|
||||||
" --timeout N Maximum time for any one test in N millseconds\n"
|
" --timeout N Maximum time for any one test in N millseconds\n"
|
||||||
" -v|--verbose Increased output. Repeat for more output.\n"
|
" -v|--verbose Increased output. Repeat for more output.\n"
|
||||||
" --vdbe-debug Activate VDBE debugging.\n"
|
" --vdbe-debug Activate VDBE debugging.\n"
|
||||||
@@ -1883,8 +1887,10 @@ int main(int argc, char **argv){
|
|||||||
Blob *pDb; /* For looping over template databases */
|
Blob *pDb; /* For looping over template databases */
|
||||||
int i; /* Loop index for the argv[] loop */
|
int i; /* Loop index for the argv[] loop */
|
||||||
int dbSqlOnly = 0; /* Only use scripts that are dbsqlfuzz */
|
int dbSqlOnly = 0; /* Only use scripts that are dbsqlfuzz */
|
||||||
int onlySqlid = -1; /* --sqlid */
|
int firstSqlid = -1; /* First --sqlid range */
|
||||||
int onlyDbid = -1; /* --dbid */
|
int lastSqlid = 0x7fffffff; /* Last --sqlid range */
|
||||||
|
int firstDbid = -1; /* --dbid */
|
||||||
|
int lastDbid = 0x7fffffff; /* --dbid end */
|
||||||
int nativeFlag = 0; /* --native-vfs */
|
int nativeFlag = 0; /* --native-vfs */
|
||||||
int rebuildFlag = 0; /* --rebuild */
|
int rebuildFlag = 0; /* --rebuild */
|
||||||
int vdbeLimitFlag = 0; /* --limit-vdbe */
|
int vdbeLimitFlag = 0; /* --limit-vdbe */
|
||||||
@@ -1942,8 +1948,18 @@ int main(int argc, char **argv){
|
|||||||
cellSzCkFlag = 1;
|
cellSzCkFlag = 1;
|
||||||
}else
|
}else
|
||||||
if( strcmp(z,"dbid")==0 ){
|
if( strcmp(z,"dbid")==0 ){
|
||||||
|
const char *zDotDot;
|
||||||
if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]);
|
if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]);
|
||||||
onlyDbid = integerValue(argv[++i]);
|
i++;
|
||||||
|
zDotDot = strstr(argv[i], "..");
|
||||||
|
if( zDotDot ){
|
||||||
|
firstDbid = atoi(argv[i]);
|
||||||
|
if( zDotDot[2] ){
|
||||||
|
lastDbid = atoi(&zDotDot[2]);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
lastDbid = firstDbid = integerValue(argv[i]);
|
||||||
|
}
|
||||||
}else
|
}else
|
||||||
if( strcmp(z,"export-db")==0 ){
|
if( strcmp(z,"export-db")==0 ){
|
||||||
if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]);
|
if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]);
|
||||||
@@ -2043,8 +2059,19 @@ int main(int argc, char **argv){
|
|||||||
bTimer = 1;
|
bTimer = 1;
|
||||||
}else
|
}else
|
||||||
if( strcmp(z,"sqlid")==0 ){
|
if( strcmp(z,"sqlid")==0 ){
|
||||||
|
const char *zDotDot;
|
||||||
if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]);
|
if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]);
|
||||||
onlySqlid = integerValue(argv[++i]);
|
i++;
|
||||||
|
zDotDot = strstr(argv[i], "..");
|
||||||
|
if( zDotDot ){
|
||||||
|
firstSqlid = atoi(argv[i]);
|
||||||
|
if( zDotDot[2] ){
|
||||||
|
lastSqlid = atoi(&zDotDot[2]);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
firstSqlid = integerValue(argv[i]);
|
||||||
|
lastSqlid = firstSqlid;
|
||||||
|
}
|
||||||
}else
|
}else
|
||||||
if( strcmp(z,"timeout")==0 ){
|
if( strcmp(z,"timeout")==0 ){
|
||||||
if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]);
|
if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]);
|
||||||
@@ -2292,13 +2319,14 @@ int main(int argc, char **argv){
|
|||||||
const char *zExDb =
|
const char *zExDb =
|
||||||
"SELECT writefile(printf('%s/db%06d.db',?1,dbid),dbcontent),"
|
"SELECT writefile(printf('%s/db%06d.db',?1,dbid),dbcontent),"
|
||||||
" dbid, printf('%s/db%06d.db',?1,dbid), length(dbcontent)"
|
" dbid, printf('%s/db%06d.db',?1,dbid), length(dbcontent)"
|
||||||
" FROM db WHERE ?2<0 OR dbid=?2;";
|
" FROM db WHERE dbid BETWEEN ?2 AND ?3;";
|
||||||
rc = sqlite3_prepare_v2(db, zExDb, -1, &pStmt, 0);
|
rc = sqlite3_prepare_v2(db, zExDb, -1, &pStmt, 0);
|
||||||
if( rc ) fatalError("cannot prepare statement [%s]: %s",
|
if( rc ) fatalError("cannot prepare statement [%s]: %s",
|
||||||
zExDb, sqlite3_errmsg(db));
|
zExDb, sqlite3_errmsg(db));
|
||||||
sqlite3_bind_text64(pStmt, 1, zExpDb, strlen(zExpDb),
|
sqlite3_bind_text64(pStmt, 1, zExpDb, strlen(zExpDb),
|
||||||
SQLITE_STATIC, SQLITE_UTF8);
|
SQLITE_STATIC, SQLITE_UTF8);
|
||||||
sqlite3_bind_int(pStmt, 2, onlyDbid);
|
sqlite3_bind_int(pStmt, 2, firstDbid);
|
||||||
|
sqlite3_bind_int(pStmt, 3, lastDbid);
|
||||||
while( sqlite3_step(pStmt)==SQLITE_ROW ){
|
while( sqlite3_step(pStmt)==SQLITE_ROW ){
|
||||||
printf("write db-%d (%d bytes) into %s\n",
|
printf("write db-%d (%d bytes) into %s\n",
|
||||||
sqlite3_column_int(pStmt,1),
|
sqlite3_column_int(pStmt,1),
|
||||||
@@ -2311,13 +2339,14 @@ int main(int argc, char **argv){
|
|||||||
const char *zExSql =
|
const char *zExSql =
|
||||||
"SELECT writefile(printf('%s/sql%06d.txt',?1,sqlid),sqltext),"
|
"SELECT writefile(printf('%s/sql%06d.txt',?1,sqlid),sqltext),"
|
||||||
" sqlid, printf('%s/sql%06d.txt',?1,sqlid), length(sqltext)"
|
" sqlid, printf('%s/sql%06d.txt',?1,sqlid), length(sqltext)"
|
||||||
" FROM xsql WHERE ?2<0 OR sqlid=?2;";
|
" FROM xsql WHERE sqlid BETWEEN ?2 AND ?3;";
|
||||||
rc = sqlite3_prepare_v2(db, zExSql, -1, &pStmt, 0);
|
rc = sqlite3_prepare_v2(db, zExSql, -1, &pStmt, 0);
|
||||||
if( rc ) fatalError("cannot prepare statement [%s]: %s",
|
if( rc ) fatalError("cannot prepare statement [%s]: %s",
|
||||||
zExSql, sqlite3_errmsg(db));
|
zExSql, sqlite3_errmsg(db));
|
||||||
sqlite3_bind_text64(pStmt, 1, zExpSql, strlen(zExpSql),
|
sqlite3_bind_text64(pStmt, 1, zExpSql, strlen(zExpSql),
|
||||||
SQLITE_STATIC, SQLITE_UTF8);
|
SQLITE_STATIC, SQLITE_UTF8);
|
||||||
sqlite3_bind_int(pStmt, 2, onlySqlid);
|
sqlite3_bind_int(pStmt, 2, firstSqlid);
|
||||||
|
sqlite3_bind_int(pStmt, 3, lastSqlid);
|
||||||
while( sqlite3_step(pStmt)==SQLITE_ROW ){
|
while( sqlite3_step(pStmt)==SQLITE_ROW ){
|
||||||
printf("write sql-%d (%d bytes) into %s\n",
|
printf("write sql-%d (%d bytes) into %s\n",
|
||||||
sqlite3_column_int(pStmt,1),
|
sqlite3_column_int(pStmt,1),
|
||||||
@@ -2333,11 +2362,11 @@ int main(int argc, char **argv){
|
|||||||
/* Load all SQL script content and all initial database images from the
|
/* Load all SQL script content and all initial database images from the
|
||||||
** source db
|
** source db
|
||||||
*/
|
*/
|
||||||
blobListLoadFromDb(db, "SELECT sqlid, sqltext FROM xsql", onlySqlid,
|
blobListLoadFromDb(db, "SELECT sqlid, sqltext FROM xsql", firstSqlid,
|
||||||
&g.nSql, &g.pFirstSql);
|
lastSqlid, &g.nSql, &g.pFirstSql);
|
||||||
if( g.nSql==0 ) fatalError("need at least one SQL script");
|
if( g.nSql==0 ) fatalError("need at least one SQL script");
|
||||||
blobListLoadFromDb(db, "SELECT dbid, dbcontent FROM db", onlyDbid,
|
blobListLoadFromDb(db, "SELECT dbid, dbcontent FROM db", firstDbid,
|
||||||
&g.nDb, &g.pFirstDb);
|
lastDbid, &g.nDb, &g.pFirstDb);
|
||||||
if( g.nDb==0 ){
|
if( g.nDb==0 ){
|
||||||
g.pFirstDb = safe_realloc(0, sizeof(Blob));
|
g.pFirstDb = safe_realloc(0, sizeof(Blob));
|
||||||
memset(g.pFirstDb, 0, sizeof(Blob));
|
memset(g.pFirstDb, 0, sizeof(Blob));
|
||||||
|
Binary file not shown.
@@ -57,7 +57,7 @@ close $in
|
|||||||
#
|
#
|
||||||
set out [open sqlite3.c w]
|
set out [open sqlite3.c w]
|
||||||
# Force the output to use unix line endings, even on Windows.
|
# Force the output to use unix line endings, even on Windows.
|
||||||
fconfigure $out -translation lf
|
fconfigure $out -translation binary
|
||||||
set today [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S UTC" -gmt 1]
|
set today [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S UTC" -gmt 1]
|
||||||
puts $out [subst \
|
puts $out [subst \
|
||||||
{/******************************************************************************
|
{/******************************************************************************
|
||||||
|
@@ -88,7 +88,7 @@ set fname sqlite3.c
|
|||||||
if {$enable_recover} { set fname sqlite3r.c }
|
if {$enable_recover} { set fname sqlite3r.c }
|
||||||
set out [open $fname wb]
|
set out [open $fname wb]
|
||||||
# Force the output to use unix line endings, even on Windows.
|
# Force the output to use unix line endings, even on Windows.
|
||||||
fconfigure $out -translation lf
|
fconfigure $out -translation binary
|
||||||
set today [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S UTC" -gmt 1]
|
set today [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S UTC" -gmt 1]
|
||||||
puts $out [subst \
|
puts $out [subst \
|
||||||
{/******************************************************************************
|
{/******************************************************************************
|
||||||
|
@@ -107,7 +107,7 @@ set declpattern5 \
|
|||||||
{^ *([a-zA-Z][a-zA-Z_0-9 ]+ \**)(sqlite3rebaser_[_a-zA-Z0-9]+)(\(.*)$}
|
{^ *([a-zA-Z][a-zA-Z_0-9 ]+ \**)(sqlite3rebaser_[_a-zA-Z0-9]+)(\(.*)$}
|
||||||
|
|
||||||
# Force the output to use unix line endings, even on Windows.
|
# Force the output to use unix line endings, even on Windows.
|
||||||
fconfigure stdout -translation lf
|
fconfigure stdout -translation binary
|
||||||
|
|
||||||
set filelist [subst {
|
set filelist [subst {
|
||||||
$TOP/src/sqlite.h.in
|
$TOP/src/sqlite.h.in
|
||||||
|
@@ -15,7 +15,7 @@ set END {^/\*+ End of %s \*+/}
|
|||||||
|
|
||||||
set in [open sqlite3.c]
|
set in [open sqlite3.c]
|
||||||
set out1 [open sqlite3-all.c w]
|
set out1 [open sqlite3-all.c w]
|
||||||
fconfigure $out1 -translation lf
|
fconfigure $out1 -translation binary
|
||||||
|
|
||||||
# Copy the header from sqlite3.c into sqlite3-all.c
|
# Copy the header from sqlite3.c into sqlite3-all.c
|
||||||
#
|
#
|
||||||
|
Reference in New Issue
Block a user