In preparation for update to sqlite3-3.31.1 (3310100),
recommit r357201: MFV r357163, which was reverted by r357522 due to segfault under PowerPc. Update sqlite3-3.30.1 (3300100) --> sqlite3-3.31.0 (3310000) MFC after: 1 month
This commit is contained in:
parent
283a8608cb
commit
0e2816f50a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=360221
@ -210,6 +210,12 @@ OPTIMIZATIONS = 2
|
|||||||
SESSION = 0
|
SESSION = 0
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
|
# Set this to non-0 to enable support for the rbu extension.
|
||||||
|
#
|
||||||
|
!IFNDEF RBU
|
||||||
|
RBU = 0
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
# Set the source code file to be used by executables and libraries when
|
# Set the source code file to be used by executables and libraries when
|
||||||
# they need the amalgamation.
|
# they need the amalgamation.
|
||||||
#
|
#
|
||||||
@ -282,7 +288,6 @@ OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_JSON1=1
|
|||||||
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB=1
|
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB=1
|
||||||
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DBPAGE_VTAB=1
|
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DBPAGE_VTAB=1
|
||||||
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DBSTAT_VTAB=1
|
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DBSTAT_VTAB=1
|
||||||
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_INTROSPECTION_PRAGMAS=1
|
|
||||||
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DESERIALIZE=1
|
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_DESERIALIZE=1
|
||||||
!ENDIF
|
!ENDIF
|
||||||
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_COLUMN_METADATA=1
|
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_COLUMN_METADATA=1
|
||||||
@ -296,6 +301,13 @@ OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_SESSION=1
|
|||||||
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_PREUPDATE_HOOK=1
|
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_PREUPDATE_HOOK=1
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
|
# Should the rbu extension be enabled? If so, add compilation options
|
||||||
|
# to enable it.
|
||||||
|
#
|
||||||
|
!IF $(RBU)!=0
|
||||||
|
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RBU=1
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
# These are the "extended" SQLite compilation options used when compiling for
|
# These are the "extended" SQLite compilation options used when compiling for
|
||||||
# the Windows 10 platform.
|
# the Windows 10 platform.
|
||||||
#
|
#
|
||||||
@ -978,7 +990,7 @@ Replace.exe:
|
|||||||
sqlite3.def: Replace.exe $(LIBOBJ)
|
sqlite3.def: Replace.exe $(LIBOBJ)
|
||||||
echo EXPORTS > sqlite3.def
|
echo EXPORTS > sqlite3.def
|
||||||
dumpbin /all $(LIBOBJ) \
|
dumpbin /all $(LIBOBJ) \
|
||||||
| .\Replace.exe "^\s+/EXPORT:_?(sqlite3(?:session|changeset|changegroup|rebaser)?_[^@,]*)(?:@\d+|,DATA)?$$" $$1 true \
|
| .\Replace.exe "^\s+/EXPORT:_?(sqlite3(?:session|changeset|changegroup|rebaser|rbu)?_[^@,]*)(?:@\d+|,DATA)?$$" $$1 true \
|
||||||
| sort >> sqlite3.def
|
| sort >> sqlite3.def
|
||||||
|
|
||||||
$(SQLITE3EXE): shell.c $(SHELL_CORE_DEP) $(LIBRESOBJS) $(SHELL_CORE_SRC) $(SQLITE3H)
|
$(SQLITE3EXE): shell.c $(SHELL_CORE_DEP) $(LIBRESOBJS) $(SHELL_CORE_SRC) $(SQLITE3H)
|
||||||
|
22
contrib/sqlite3/configure
vendored
22
contrib/sqlite3/configure
vendored
@ -1,6 +1,6 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.69 for sqlite 3.30.1.
|
# Generated by GNU Autoconf 2.69 for sqlite 3.31.0.
|
||||||
#
|
#
|
||||||
# Report bugs to <http://www.sqlite.org>.
|
# Report bugs to <http://www.sqlite.org>.
|
||||||
#
|
#
|
||||||
@ -590,8 +590,8 @@ MAKEFLAGS=
|
|||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='sqlite'
|
PACKAGE_NAME='sqlite'
|
||||||
PACKAGE_TARNAME='sqlite'
|
PACKAGE_TARNAME='sqlite'
|
||||||
PACKAGE_VERSION='3.30.1'
|
PACKAGE_VERSION='3.31.0'
|
||||||
PACKAGE_STRING='sqlite 3.30.1'
|
PACKAGE_STRING='sqlite 3.31.0'
|
||||||
PACKAGE_BUGREPORT='http://www.sqlite.org'
|
PACKAGE_BUGREPORT='http://www.sqlite.org'
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
@ -1341,7 +1341,7 @@ if test "$ac_init_help" = "long"; then
|
|||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures sqlite 3.30.1 to adapt to many kinds of systems.
|
\`configure' configures sqlite 3.31.0 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
@ -1412,7 +1412,7 @@ fi
|
|||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of sqlite 3.30.1:";;
|
short | recursive ) echo "Configuration of sqlite 3.31.0:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
@ -1537,7 +1537,7 @@ fi
|
|||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
sqlite configure 3.30.1
|
sqlite configure 3.31.0
|
||||||
generated by GNU Autoconf 2.69
|
generated by GNU Autoconf 2.69
|
||||||
|
|
||||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
@ -1952,7 +1952,7 @@ cat >config.log <<_ACEOF
|
|||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by sqlite $as_me 3.30.1, which was
|
It was created by sqlite $as_me 3.31.0, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
@ -2818,7 +2818,7 @@ fi
|
|||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='sqlite'
|
PACKAGE='sqlite'
|
||||||
VERSION='3.30.1'
|
VERSION='3.31.0'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
@ -13653,7 +13653,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$enable_rtree" = "xyes"; then
|
if test x"$enable_rtree" = "xyes"; then
|
||||||
BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_ENABLE_RTREE"
|
BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_GEOPOLY"
|
||||||
fi
|
fi
|
||||||
#-----------------------------------------------------------------------
|
#-----------------------------------------------------------------------
|
||||||
|
|
||||||
@ -14438,7 +14438,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by sqlite $as_me 3.30.1, which was
|
This file was extended by sqlite $as_me 3.31.0, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
@ -14495,7 +14495,7 @@ _ACEOF
|
|||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
sqlite config.status 3.30.1
|
sqlite config.status 3.31.0
|
||||||
configured by $0, generated by GNU Autoconf 2.69,
|
configured by $0, generated by GNU Autoconf 2.69,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
AC_PREREQ(2.61)
|
AC_PREREQ(2.61)
|
||||||
AC_INIT(sqlite, 3.30.1, http://www.sqlite.org)
|
AC_INIT(sqlite, 3.31.0, http://www.sqlite.org)
|
||||||
AC_CONFIG_SRCDIR([sqlite3.c])
|
AC_CONFIG_SRCDIR([sqlite3.c])
|
||||||
AC_CONFIG_AUX_DIR([.])
|
AC_CONFIG_AUX_DIR([.])
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ AC_ARG_ENABLE(rtree, [AS_HELP_STRING(
|
|||||||
[--enable-rtree], [include rtree support [default=yes]])],
|
[--enable-rtree], [include rtree support [default=yes]])],
|
||||||
[], [enable_rtree=yes])
|
[], [enable_rtree=yes])
|
||||||
if test x"$enable_rtree" = "xyes"; then
|
if test x"$enable_rtree" = "xyes"; then
|
||||||
BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_ENABLE_RTREE"
|
BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_GEOPOLY"
|
||||||
fi
|
fi
|
||||||
#-----------------------------------------------------------------------
|
#-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -2007,19 +2007,23 @@ int sqlite3_shathree_init(
|
|||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
SQLITE_EXTENSION_INIT2(pApi);
|
SQLITE_EXTENSION_INIT2(pApi);
|
||||||
(void)pzErrMsg; /* Unused parameter */
|
(void)pzErrMsg; /* Unused parameter */
|
||||||
rc = sqlite3_create_function(db, "sha3", 1, SQLITE_UTF8, 0,
|
rc = sqlite3_create_function(db, "sha3", 1,
|
||||||
sha3Func, 0, 0);
|
SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC,
|
||||||
|
0, sha3Func, 0, 0);
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
rc = sqlite3_create_function(db, "sha3", 2, SQLITE_UTF8, 0,
|
rc = sqlite3_create_function(db, "sha3", 2,
|
||||||
sha3Func, 0, 0);
|
SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC,
|
||||||
|
0, sha3Func, 0, 0);
|
||||||
}
|
}
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
rc = sqlite3_create_function(db, "sha3_query", 1, SQLITE_UTF8, 0,
|
rc = sqlite3_create_function(db, "sha3_query", 1,
|
||||||
sha3QueryFunc, 0, 0);
|
SQLITE_UTF8 | SQLITE_DIRECTONLY,
|
||||||
|
0, sha3QueryFunc, 0, 0);
|
||||||
}
|
}
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
rc = sqlite3_create_function(db, "sha3_query", 2, SQLITE_UTF8, 0,
|
rc = sqlite3_create_function(db, "sha3_query", 2,
|
||||||
sha3QueryFunc, 0, 0);
|
SQLITE_UTF8 | SQLITE_DIRECTONLY,
|
||||||
|
0, sha3QueryFunc, 0, 0);
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -2613,6 +2617,7 @@ static int fsdirConnect(
|
|||||||
pNew = (fsdir_tab*)sqlite3_malloc( sizeof(*pNew) );
|
pNew = (fsdir_tab*)sqlite3_malloc( sizeof(*pNew) );
|
||||||
if( pNew==0 ) return SQLITE_NOMEM;
|
if( pNew==0 ) return SQLITE_NOMEM;
|
||||||
memset(pNew, 0, sizeof(*pNew));
|
memset(pNew, 0, sizeof(*pNew));
|
||||||
|
sqlite3_vtab_config(db, SQLITE_VTAB_DIRECTONLY);
|
||||||
}
|
}
|
||||||
*ppVtab = (sqlite3_vtab*)pNew;
|
*ppVtab = (sqlite3_vtab*)pNew;
|
||||||
return rc;
|
return rc;
|
||||||
@ -3006,10 +3011,12 @@ int sqlite3_fileio_init(
|
|||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
SQLITE_EXTENSION_INIT2(pApi);
|
SQLITE_EXTENSION_INIT2(pApi);
|
||||||
(void)pzErrMsg; /* Unused parameter */
|
(void)pzErrMsg; /* Unused parameter */
|
||||||
rc = sqlite3_create_function(db, "readfile", 1, SQLITE_UTF8, 0,
|
rc = sqlite3_create_function(db, "readfile", 1,
|
||||||
|
SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
|
||||||
readfileFunc, 0, 0);
|
readfileFunc, 0, 0);
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
rc = sqlite3_create_function(db, "writefile", -1, SQLITE_UTF8, 0,
|
rc = sqlite3_create_function(db, "writefile", -1,
|
||||||
|
SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
|
||||||
writefileFunc, 0, 0);
|
writefileFunc, 0, 0);
|
||||||
}
|
}
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
@ -3144,6 +3151,7 @@ static int completionConnect(
|
|||||||
#define COMPLETION_COLUMN_WHOLELINE 2 /* Entire line seen so far */
|
#define COMPLETION_COLUMN_WHOLELINE 2 /* Entire line seen so far */
|
||||||
#define COMPLETION_COLUMN_PHASE 3 /* ePhase - used for debugging only */
|
#define COMPLETION_COLUMN_PHASE 3 /* ePhase - used for debugging only */
|
||||||
|
|
||||||
|
sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS);
|
||||||
rc = sqlite3_declare_vtab(db,
|
rc = sqlite3_declare_vtab(db,
|
||||||
"CREATE TABLE x("
|
"CREATE TABLE x("
|
||||||
" candidate TEXT,"
|
" candidate TEXT,"
|
||||||
@ -4578,6 +4586,7 @@ static int zipfileConnect(
|
|||||||
zipfileDequote(pNew->zFile);
|
zipfileDequote(pNew->zFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sqlite3_vtab_config(db, SQLITE_VTAB_DIRECTONLY);
|
||||||
*ppVtab = (sqlite3_vtab*)pNew;
|
*ppVtab = (sqlite3_vtab*)pNew;
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -5190,25 +5199,25 @@ static int zipfileDeflate(
|
|||||||
u8 **ppOut, int *pnOut, /* Output */
|
u8 **ppOut, int *pnOut, /* Output */
|
||||||
char **pzErr /* OUT: Error message */
|
char **pzErr /* OUT: Error message */
|
||||||
){
|
){
|
||||||
sqlite3_int64 nAlloc = compressBound(nIn);
|
|
||||||
u8 *aOut;
|
|
||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
|
sqlite3_int64 nAlloc;
|
||||||
|
z_stream str;
|
||||||
|
u8 *aOut;
|
||||||
|
|
||||||
|
memset(&str, 0, sizeof(str));
|
||||||
|
str.next_in = (Bytef*)aIn;
|
||||||
|
str.avail_in = nIn;
|
||||||
|
deflateInit2(&str, 9, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY);
|
||||||
|
|
||||||
|
nAlloc = deflateBound(&str, nIn);
|
||||||
aOut = (u8*)sqlite3_malloc64(nAlloc);
|
aOut = (u8*)sqlite3_malloc64(nAlloc);
|
||||||
if( aOut==0 ){
|
if( aOut==0 ){
|
||||||
rc = SQLITE_NOMEM;
|
rc = SQLITE_NOMEM;
|
||||||
}else{
|
}else{
|
||||||
int res;
|
int res;
|
||||||
z_stream str;
|
|
||||||
memset(&str, 0, sizeof(str));
|
|
||||||
str.next_in = (Bytef*)aIn;
|
|
||||||
str.avail_in = nIn;
|
|
||||||
str.next_out = aOut;
|
str.next_out = aOut;
|
||||||
str.avail_out = nAlloc;
|
str.avail_out = nAlloc;
|
||||||
|
|
||||||
deflateInit2(&str, 9, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY);
|
|
||||||
res = deflate(&str, Z_FINISH);
|
res = deflate(&str, Z_FINISH);
|
||||||
|
|
||||||
if( res==Z_STREAM_END ){
|
if( res==Z_STREAM_END ){
|
||||||
*ppOut = aOut;
|
*ppOut = aOut;
|
||||||
*pnOut = (int)str.total_out;
|
*pnOut = (int)str.total_out;
|
||||||
@ -5517,10 +5526,10 @@ static int zipfileBestIndex(
|
|||||||
idx = i;
|
idx = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pIdxInfo->estimatedCost = 1000.0;
|
||||||
if( idx>=0 ){
|
if( idx>=0 ){
|
||||||
pIdxInfo->aConstraintUsage[idx].argvIndex = 1;
|
pIdxInfo->aConstraintUsage[idx].argvIndex = 1;
|
||||||
pIdxInfo->aConstraintUsage[idx].omit = 1;
|
pIdxInfo->aConstraintUsage[idx].omit = 1;
|
||||||
pIdxInfo->estimatedCost = 1000.0;
|
|
||||||
pIdxInfo->idxNum = 1;
|
pIdxInfo->idxNum = 1;
|
||||||
}else if( unusable ){
|
}else if( unusable ){
|
||||||
return SQLITE_CONSTRAINT;
|
return SQLITE_CONSTRAINT;
|
||||||
@ -5642,8 +5651,8 @@ static int zipfileGetMode(
|
|||||||
** identical, ignoring any trailing '/' character in either path. */
|
** identical, ignoring any trailing '/' character in either path. */
|
||||||
static int zipfileComparePath(const char *zA, const char *zB, int nB){
|
static int zipfileComparePath(const char *zA, const char *zB, int nB){
|
||||||
int nA = (int)strlen(zA);
|
int nA = (int)strlen(zA);
|
||||||
if( zA[nA-1]=='/' ) nA--;
|
if( nA>0 && zA[nA-1]=='/' ) nA--;
|
||||||
if( zB[nB-1]=='/' ) nB--;
|
if( nB>0 && zB[nB-1]=='/' ) nB--;
|
||||||
if( nA==nB && memcmp(zA, zB, nA)==0 ) return 0;
|
if( nA==nB && memcmp(zA, zB, nA)==0 ) return 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -5653,6 +5662,10 @@ static int zipfileBegin(sqlite3_vtab *pVtab){
|
|||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
|
|
||||||
assert( pTab->pWriteFd==0 );
|
assert( pTab->pWriteFd==0 );
|
||||||
|
if( pTab->zFile==0 || pTab->zFile[0]==0 ){
|
||||||
|
pTab->base.zErrMsg = sqlite3_mprintf("zipfile: missing filename");
|
||||||
|
return SQLITE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
/* Open a write fd on the file. Also load the entire central directory
|
/* Open a write fd on the file. Also load the entire central directory
|
||||||
** structure into memory. During the transaction any new file data is
|
** structure into memory. During the transaction any new file data is
|
||||||
@ -5827,6 +5840,7 @@ static int zipfileUpdate(
|
|||||||
|
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
zPath = (const char*)sqlite3_value_text(apVal[2]);
|
zPath = (const char*)sqlite3_value_text(apVal[2]);
|
||||||
|
if( zPath==0 ) zPath = "";
|
||||||
nPath = (int)strlen(zPath);
|
nPath = (int)strlen(zPath);
|
||||||
mTime = zipfileGetTime(apVal[4]);
|
mTime = zipfileGetTime(apVal[4]);
|
||||||
}
|
}
|
||||||
@ -5836,11 +5850,15 @@ static int zipfileUpdate(
|
|||||||
** '/'. This appears to be required for compatibility with info-zip
|
** '/'. This appears to be required for compatibility with info-zip
|
||||||
** (the unzip command on unix). It does not create directories
|
** (the unzip command on unix). It does not create directories
|
||||||
** otherwise. */
|
** otherwise. */
|
||||||
if( zPath[nPath-1]!='/' ){
|
if( nPath<=0 || zPath[nPath-1]!='/' ){
|
||||||
zFree = sqlite3_mprintf("%s/", zPath);
|
zFree = sqlite3_mprintf("%s/", zPath);
|
||||||
if( zFree==0 ){ rc = SQLITE_NOMEM; }
|
|
||||||
zPath = (const char*)zFree;
|
zPath = (const char*)zFree;
|
||||||
nPath++;
|
if( zFree==0 ){
|
||||||
|
rc = SQLITE_NOMEM;
|
||||||
|
nPath = 0;
|
||||||
|
}else{
|
||||||
|
nPath = (int)strlen(zPath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6233,19 +6251,19 @@ void zipfileStep(sqlite3_context *pCtx, int nVal, sqlite3_value **apVal){
|
|||||||
** at the end of the path. Or, if this is not a directory and the path
|
** at the end of the path. Or, if this is not a directory and the path
|
||||||
** ends in '/' it is an error. */
|
** ends in '/' it is an error. */
|
||||||
if( bIsDir==0 ){
|
if( bIsDir==0 ){
|
||||||
if( zName[nName-1]=='/' ){
|
if( nName>0 && zName[nName-1]=='/' ){
|
||||||
zErr = sqlite3_mprintf("non-directory name must not end with /");
|
zErr = sqlite3_mprintf("non-directory name must not end with /");
|
||||||
rc = SQLITE_ERROR;
|
rc = SQLITE_ERROR;
|
||||||
goto zipfile_step_out;
|
goto zipfile_step_out;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
if( zName[nName-1]!='/' ){
|
if( nName==0 || zName[nName-1]!='/' ){
|
||||||
zName = zFree = sqlite3_mprintf("%s/", zName);
|
zName = zFree = sqlite3_mprintf("%s/", zName);
|
||||||
nName++;
|
|
||||||
if( zName==0 ){
|
if( zName==0 ){
|
||||||
rc = SQLITE_NOMEM;
|
rc = SQLITE_NOMEM;
|
||||||
goto zipfile_step_out;
|
goto zipfile_step_out;
|
||||||
}
|
}
|
||||||
|
nName = (int)strlen(zName);
|
||||||
}else{
|
}else{
|
||||||
while( nName>1 && zName[nName-2]=='/' ) nName--;
|
while( nName>1 && zName[nName-2]=='/' ) nName--;
|
||||||
}
|
}
|
||||||
@ -6501,10 +6519,12 @@ int sqlite3_sqlar_init(
|
|||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
SQLITE_EXTENSION_INIT2(pApi);
|
SQLITE_EXTENSION_INIT2(pApi);
|
||||||
(void)pzErrMsg; /* Unused parameter */
|
(void)pzErrMsg; /* Unused parameter */
|
||||||
rc = sqlite3_create_function(db, "sqlar_compress", 1, SQLITE_UTF8, 0,
|
rc = sqlite3_create_function(db, "sqlar_compress", 1,
|
||||||
|
SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
|
||||||
sqlarCompressFunc, 0, 0);
|
sqlarCompressFunc, 0, 0);
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
rc = sqlite3_create_function(db, "sqlar_uncompress", 2, SQLITE_UTF8, 0,
|
rc = sqlite3_create_function(db, "sqlar_uncompress", 2,
|
||||||
|
SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
|
||||||
sqlarUncompressFunc, 0, 0);
|
sqlarUncompressFunc, 0, 0);
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
@ -6525,8 +6545,8 @@ int sqlite3_sqlar_init(
|
|||||||
**
|
**
|
||||||
*************************************************************************
|
*************************************************************************
|
||||||
*/
|
*/
|
||||||
|
#if !defined(SQLITEEXPERT_H)
|
||||||
|
#define SQLITEEXPERT_H 1
|
||||||
/* #include "sqlite3.h" */
|
/* #include "sqlite3.h" */
|
||||||
|
|
||||||
typedef struct sqlite3expert sqlite3expert;
|
typedef struct sqlite3expert sqlite3expert;
|
||||||
@ -6680,7 +6700,7 @@ const char *sqlite3_expert_report(sqlite3expert*, int iStmt, int eReport);
|
|||||||
*/
|
*/
|
||||||
void sqlite3_expert_destroy(sqlite3expert*);
|
void sqlite3_expert_destroy(sqlite3expert*);
|
||||||
|
|
||||||
|
#endif /* !defined(SQLITEEXPERT_H) */
|
||||||
|
|
||||||
/************************* End ../ext/expert/sqlite3expert.h ********************/
|
/************************* End ../ext/expert/sqlite3expert.h ********************/
|
||||||
/************************* Begin ../ext/expert/sqlite3expert.c ******************/
|
/************************* Begin ../ext/expert/sqlite3expert.c ******************/
|
||||||
@ -9566,6 +9586,7 @@ struct ShellState {
|
|||||||
int outCount; /* Revert to stdout when reaching zero */
|
int outCount; /* Revert to stdout when reaching zero */
|
||||||
int cnt; /* Number of records displayed so far */
|
int cnt; /* Number of records displayed so far */
|
||||||
int lineno; /* Line number of last line read from in */
|
int lineno; /* Line number of last line read from in */
|
||||||
|
int openFlags; /* Additional flags to open. (SQLITE_OPEN_NOFOLLOW) */
|
||||||
FILE *in; /* Read commands from this stream */
|
FILE *in; /* Read commands from this stream */
|
||||||
FILE *out; /* Write results here */
|
FILE *out; /* Write results here */
|
||||||
FILE *traceOut; /* Output for sqlite3_trace() */
|
FILE *traceOut; /* Output for sqlite3_trace() */
|
||||||
@ -10400,19 +10421,22 @@ static int shell_callback(
|
|||||||
const int *colWidth;
|
const int *colWidth;
|
||||||
int showHdr;
|
int showHdr;
|
||||||
char *rowSep;
|
char *rowSep;
|
||||||
|
int nWidth;
|
||||||
if( p->cMode==MODE_Column ){
|
if( p->cMode==MODE_Column ){
|
||||||
colWidth = p->colWidth;
|
colWidth = p->colWidth;
|
||||||
|
nWidth = ArraySize(p->colWidth);
|
||||||
showHdr = p->showHeader;
|
showHdr = p->showHeader;
|
||||||
rowSep = p->rowSeparator;
|
rowSep = p->rowSeparator;
|
||||||
}else{
|
}else{
|
||||||
colWidth = aExplainWidths;
|
colWidth = aExplainWidths;
|
||||||
|
nWidth = ArraySize(aExplainWidths);
|
||||||
showHdr = 1;
|
showHdr = 1;
|
||||||
rowSep = SEP_Row;
|
rowSep = SEP_Row;
|
||||||
}
|
}
|
||||||
if( p->cnt++==0 ){
|
if( p->cnt++==0 ){
|
||||||
for(i=0; i<nArg; i++){
|
for(i=0; i<nArg; i++){
|
||||||
int w, n;
|
int w, n;
|
||||||
if( i<ArraySize(p->colWidth) ){
|
if( i<nWidth ){
|
||||||
w = colWidth[i];
|
w = colWidth[i];
|
||||||
}else{
|
}else{
|
||||||
w = 0;
|
w = 0;
|
||||||
@ -11302,6 +11326,9 @@ static void restore_debug_trace_modes(void){
|
|||||||
/* Create the TEMP table used to store parameter bindings */
|
/* Create the TEMP table used to store parameter bindings */
|
||||||
static void bind_table_init(ShellState *p){
|
static void bind_table_init(ShellState *p){
|
||||||
int wrSchema = 0;
|
int wrSchema = 0;
|
||||||
|
int defensiveMode = 0;
|
||||||
|
sqlite3_db_config(p->db, SQLITE_DBCONFIG_DEFENSIVE, -1, &defensiveMode);
|
||||||
|
sqlite3_db_config(p->db, SQLITE_DBCONFIG_DEFENSIVE, 0, 0);
|
||||||
sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, -1, &wrSchema);
|
sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, -1, &wrSchema);
|
||||||
sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, 1, 0);
|
sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, 1, 0);
|
||||||
sqlite3_exec(p->db,
|
sqlite3_exec(p->db,
|
||||||
@ -11311,6 +11338,7 @@ static void bind_table_init(ShellState *p){
|
|||||||
") WITHOUT ROWID;",
|
") WITHOUT ROWID;",
|
||||||
0, 0, 0);
|
0, 0, 0);
|
||||||
sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, wrSchema, 0);
|
sqlite3_db_config(p->db, SQLITE_DBCONFIG_WRITABLE_SCHEMA, wrSchema, 0);
|
||||||
|
sqlite3_db_config(p->db, SQLITE_DBCONFIG_DEFENSIVE, defensiveMode, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -12053,9 +12081,7 @@ static const char *(azHelp[]) = {
|
|||||||
".excel Display the output of next command in spreadsheet",
|
".excel Display the output of next command in spreadsheet",
|
||||||
".exit ?CODE? Exit this program with return-code CODE",
|
".exit ?CODE? Exit this program with return-code CODE",
|
||||||
".expert EXPERIMENTAL. Suggest indexes for queries",
|
".expert EXPERIMENTAL. Suggest indexes for queries",
|
||||||
/* Because explain mode comes on automatically now, the ".explain" mode
|
".explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto",
|
||||||
** is removed from the help screen. It is still supported for legacy, however */
|
|
||||||
/*".explain ?on|off|auto? Turn EXPLAIN output mode on or off",*/
|
|
||||||
".filectrl CMD ... Run various sqlite3_file_control() operations",
|
".filectrl CMD ... Run various sqlite3_file_control() operations",
|
||||||
" Run \".filectrl\" with no arguments for details",
|
" Run \".filectrl\" with no arguments for details",
|
||||||
".fullschema ?--indent? Show schema and the content of sqlite_stat tables",
|
".fullschema ?--indent? Show schema and the content of sqlite_stat tables",
|
||||||
@ -12106,6 +12132,7 @@ static const char *(azHelp[]) = {
|
|||||||
" --maxsize N Maximum size for --hexdb or --deserialized database",
|
" --maxsize N Maximum size for --hexdb or --deserialized database",
|
||||||
#endif
|
#endif
|
||||||
" --new Initialize FILE to an empty database",
|
" --new Initialize FILE to an empty database",
|
||||||
|
" --nofollow Do not follow symbolic links",
|
||||||
" --readonly Open FILE readonly",
|
" --readonly Open FILE readonly",
|
||||||
" --zip FILE is a ZIP archive",
|
" --zip FILE is a ZIP archive",
|
||||||
".output ?FILE? Send output to FILE or stdout if FILE is omitted",
|
".output ?FILE? Send output to FILE or stdout if FILE is omitted",
|
||||||
@ -12670,7 +12697,7 @@ static void open_db(ShellState *p, int openFlags){
|
|||||||
switch( p->openMode ){
|
switch( p->openMode ){
|
||||||
case SHELL_OPEN_APPENDVFS: {
|
case SHELL_OPEN_APPENDVFS: {
|
||||||
sqlite3_open_v2(p->zDbFilename, &p->db,
|
sqlite3_open_v2(p->zDbFilename, &p->db,
|
||||||
SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, "apndvfs");
|
SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|p->openFlags, "apndvfs");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SHELL_OPEN_HEXDB:
|
case SHELL_OPEN_HEXDB:
|
||||||
@ -12683,12 +12710,14 @@ static void open_db(ShellState *p, int openFlags){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SHELL_OPEN_READONLY: {
|
case SHELL_OPEN_READONLY: {
|
||||||
sqlite3_open_v2(p->zDbFilename, &p->db, SQLITE_OPEN_READONLY, 0);
|
sqlite3_open_v2(p->zDbFilename, &p->db,
|
||||||
|
SQLITE_OPEN_READONLY|p->openFlags, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SHELL_OPEN_UNSPEC:
|
case SHELL_OPEN_UNSPEC:
|
||||||
case SHELL_OPEN_NORMAL: {
|
case SHELL_OPEN_NORMAL: {
|
||||||
sqlite3_open(p->zDbFilename, &p->db);
|
sqlite3_open_v2(p->zDbFilename, &p->db,
|
||||||
|
SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|p->openFlags, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -13462,7 +13491,7 @@ static unsigned int get4byteInt(unsigned char *a){
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Implementation of the ".info" command.
|
** Implementation of the ".dbinfo" command.
|
||||||
**
|
**
|
||||||
** Return 1 on error, 2 to exit, and 0 otherwise.
|
** Return 1 on error, 2 to exit, and 0 otherwise.
|
||||||
*/
|
*/
|
||||||
@ -15699,20 +15728,22 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
const char *zName;
|
const char *zName;
|
||||||
int op;
|
int op;
|
||||||
} aDbConfig[] = {
|
} aDbConfig[] = {
|
||||||
|
{ "defensive", SQLITE_DBCONFIG_DEFENSIVE },
|
||||||
|
{ "dqs_ddl", SQLITE_DBCONFIG_DQS_DDL },
|
||||||
|
{ "dqs_dml", SQLITE_DBCONFIG_DQS_DML },
|
||||||
{ "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY },
|
{ "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY },
|
||||||
|
{ "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG },
|
||||||
{ "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER },
|
{ "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER },
|
||||||
{ "enable_view", SQLITE_DBCONFIG_ENABLE_VIEW },
|
{ "enable_view", SQLITE_DBCONFIG_ENABLE_VIEW },
|
||||||
{ "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
|
{ "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
|
||||||
|
{ "legacy_alter_table", SQLITE_DBCONFIG_LEGACY_ALTER_TABLE },
|
||||||
|
{ "legacy_file_format", SQLITE_DBCONFIG_LEGACY_FILE_FORMAT },
|
||||||
{ "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
|
{ "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
|
||||||
{ "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
|
{ "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
|
||||||
{ "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG },
|
|
||||||
{ "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP },
|
|
||||||
{ "reset_database", SQLITE_DBCONFIG_RESET_DATABASE },
|
{ "reset_database", SQLITE_DBCONFIG_RESET_DATABASE },
|
||||||
{ "defensive", SQLITE_DBCONFIG_DEFENSIVE },
|
{ "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP },
|
||||||
|
{ "trusted_schema", SQLITE_DBCONFIG_TRUSTED_SCHEMA },
|
||||||
{ "writable_schema", SQLITE_DBCONFIG_WRITABLE_SCHEMA },
|
{ "writable_schema", SQLITE_DBCONFIG_WRITABLE_SCHEMA },
|
||||||
{ "legacy_alter_table", SQLITE_DBCONFIG_LEGACY_ALTER_TABLE },
|
|
||||||
{ "dqs_dml", SQLITE_DBCONFIG_DQS_DML },
|
|
||||||
{ "dqs_ddl", SQLITE_DBCONFIG_DQS_DDL },
|
|
||||||
};
|
};
|
||||||
int ii, v;
|
int ii, v;
|
||||||
open_db(p, 0);
|
open_db(p, 0);
|
||||||
@ -15722,7 +15753,7 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
sqlite3_db_config(p->db, aDbConfig[ii].op, booleanValue(azArg[2]), 0);
|
sqlite3_db_config(p->db, aDbConfig[ii].op, booleanValue(azArg[2]), 0);
|
||||||
}
|
}
|
||||||
sqlite3_db_config(p->db, aDbConfig[ii].op, -1, &v);
|
sqlite3_db_config(p->db, aDbConfig[ii].op, -1, &v);
|
||||||
utf8_printf(p->out, "%18s %s\n", aDbConfig[ii].zName, v ? "on" : "off");
|
utf8_printf(p->out, "%19s %s\n", aDbConfig[ii].zName, v ? "on" : "off");
|
||||||
if( nArg>1 ) break;
|
if( nArg>1 ) break;
|
||||||
}
|
}
|
||||||
if( nArg>1 && ii==ArraySize(aDbConfig) ){
|
if( nArg>1 && ii==ArraySize(aDbConfig) ){
|
||||||
@ -16303,10 +16334,19 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
char *zCollist = 0;
|
char *zCollist = 0;
|
||||||
sqlite3_stmt *pStmt;
|
sqlite3_stmt *pStmt;
|
||||||
int tnum = 0;
|
int tnum = 0;
|
||||||
|
int isWO = 0; /* True if making an imposter of a WITHOUT ROWID table */
|
||||||
|
int lenPK = 0; /* Length of the PRIMARY KEY string for isWO tables */
|
||||||
int i;
|
int i;
|
||||||
if( !(nArg==3 || (nArg==2 && sqlite3_stricmp(azArg[1],"off")==0)) ){
|
if( !(nArg==3 || (nArg==2 && sqlite3_stricmp(azArg[1],"off")==0)) ){
|
||||||
utf8_printf(stderr, "Usage: .imposter INDEX IMPOSTER\n"
|
utf8_printf(stderr, "Usage: .imposter INDEX IMPOSTER\n"
|
||||||
" .imposter off\n");
|
" .imposter off\n");
|
||||||
|
/* Also allowed, but not documented:
|
||||||
|
**
|
||||||
|
** .imposter TABLE IMPOSTER
|
||||||
|
**
|
||||||
|
** where TABLE is a WITHOUT ROWID table. In that case, the
|
||||||
|
** imposter is another WITHOUT ROWID table with the columns in
|
||||||
|
** storage order. */
|
||||||
rc = 1;
|
rc = 1;
|
||||||
goto meta_command_exit;
|
goto meta_command_exit;
|
||||||
}
|
}
|
||||||
@ -16315,19 +16355,22 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->db, "main", 0, 1);
|
sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->db, "main", 0, 1);
|
||||||
goto meta_command_exit;
|
goto meta_command_exit;
|
||||||
}
|
}
|
||||||
zSql = sqlite3_mprintf("SELECT rootpage FROM sqlite_master"
|
zSql = sqlite3_mprintf(
|
||||||
" WHERE name='%q' AND type='index'", azArg[1]);
|
"SELECT rootpage, 0 FROM sqlite_master"
|
||||||
|
" WHERE name='%q' AND type='index'"
|
||||||
|
"UNION ALL "
|
||||||
|
"SELECT rootpage, 1 FROM sqlite_master"
|
||||||
|
" WHERE name='%q' AND type='table'"
|
||||||
|
" AND sql LIKE '%%without%%rowid%%'",
|
||||||
|
azArg[1], azArg[1]
|
||||||
|
);
|
||||||
sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
|
sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
|
||||||
sqlite3_free(zSql);
|
sqlite3_free(zSql);
|
||||||
if( sqlite3_step(pStmt)==SQLITE_ROW ){
|
if( sqlite3_step(pStmt)==SQLITE_ROW ){
|
||||||
tnum = sqlite3_column_int(pStmt, 0);
|
tnum = sqlite3_column_int(pStmt, 0);
|
||||||
|
isWO = sqlite3_column_int(pStmt, 1);
|
||||||
}
|
}
|
||||||
sqlite3_finalize(pStmt);
|
sqlite3_finalize(pStmt);
|
||||||
if( tnum==0 ){
|
|
||||||
utf8_printf(stderr, "no such index: \"%s\"\n", azArg[1]);
|
|
||||||
rc = 1;
|
|
||||||
goto meta_command_exit;
|
|
||||||
}
|
|
||||||
zSql = sqlite3_mprintf("PRAGMA index_xinfo='%q'", azArg[1]);
|
zSql = sqlite3_mprintf("PRAGMA index_xinfo='%q'", azArg[1]);
|
||||||
rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
|
rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
|
||||||
sqlite3_free(zSql);
|
sqlite3_free(zSql);
|
||||||
@ -16344,6 +16387,9 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
zCol = zLabel;
|
zCol = zLabel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if( isWO && lenPK==0 && sqlite3_column_int(pStmt,5)==0 && zCollist ){
|
||||||
|
lenPK = (int)strlen(zCollist);
|
||||||
|
}
|
||||||
if( zCollist==0 ){
|
if( zCollist==0 ){
|
||||||
zCollist = sqlite3_mprintf("\"%w\"", zCol);
|
zCollist = sqlite3_mprintf("\"%w\"", zCol);
|
||||||
}else{
|
}else{
|
||||||
@ -16351,9 +16397,16 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
sqlite3_finalize(pStmt);
|
sqlite3_finalize(pStmt);
|
||||||
|
if( i==0 || tnum==0 ){
|
||||||
|
utf8_printf(stderr, "no such index: \"%s\"\n", azArg[1]);
|
||||||
|
rc = 1;
|
||||||
|
sqlite3_free(zCollist);
|
||||||
|
goto meta_command_exit;
|
||||||
|
}
|
||||||
|
if( lenPK==0 ) lenPK = 100000;
|
||||||
zSql = sqlite3_mprintf(
|
zSql = sqlite3_mprintf(
|
||||||
"CREATE TABLE \"%w\"(%s,PRIMARY KEY(%s))WITHOUT ROWID",
|
"CREATE TABLE \"%w\"(%s,PRIMARY KEY(%.*s))WITHOUT ROWID",
|
||||||
azArg[2], zCollist, zCollist);
|
azArg[2], zCollist, lenPK, zCollist);
|
||||||
sqlite3_free(zCollist);
|
sqlite3_free(zCollist);
|
||||||
rc = sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->db, "main", 1, tnum);
|
rc = sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->db, "main", 1, tnum);
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
@ -16364,7 +16417,8 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
}else{
|
}else{
|
||||||
utf8_printf(stdout, "%s;\n", zSql);
|
utf8_printf(stdout, "%s;\n", zSql);
|
||||||
raw_printf(stdout,
|
raw_printf(stdout,
|
||||||
"WARNING: writing to an imposter table will corrupt the index!\n"
|
"WARNING: writing to an imposter table will corrupt the \"%s\" %s!\n",
|
||||||
|
azArg[1], isWO ? "table" : "index"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
@ -16562,6 +16616,7 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
sqlite3_free(p->zFreeOnClose);
|
sqlite3_free(p->zFreeOnClose);
|
||||||
p->zFreeOnClose = 0;
|
p->zFreeOnClose = 0;
|
||||||
p->openMode = SHELL_OPEN_UNSPEC;
|
p->openMode = SHELL_OPEN_UNSPEC;
|
||||||
|
p->openFlags = 0;
|
||||||
p->szMax = 0;
|
p->szMax = 0;
|
||||||
/* Check for command-line arguments */
|
/* Check for command-line arguments */
|
||||||
for(iName=1; iName<nArg && azArg[iName][0]=='-'; iName++){
|
for(iName=1; iName<nArg && azArg[iName][0]=='-'; iName++){
|
||||||
@ -16576,6 +16631,8 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
p->openMode = SHELL_OPEN_APPENDVFS;
|
p->openMode = SHELL_OPEN_APPENDVFS;
|
||||||
}else if( optionMatch(z, "readonly") ){
|
}else if( optionMatch(z, "readonly") ){
|
||||||
p->openMode = SHELL_OPEN_READONLY;
|
p->openMode = SHELL_OPEN_READONLY;
|
||||||
|
}else if( optionMatch(z, "nofollow") ){
|
||||||
|
p->openFlags |= SQLITE_OPEN_NOFOLLOW;
|
||||||
#ifdef SQLITE_ENABLE_DESERIALIZE
|
#ifdef SQLITE_ENABLE_DESERIALIZE
|
||||||
}else if( optionMatch(z, "deserialize") ){
|
}else if( optionMatch(z, "deserialize") ){
|
||||||
p->openMode = SHELL_OPEN_DESERIALIZE;
|
p->openMode = SHELL_OPEN_DESERIALIZE;
|
||||||
@ -17732,7 +17789,7 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
{ "extra_schema_checks",SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS,"BOOLEAN" },
|
{ "extra_schema_checks",SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS,"BOOLEAN" },
|
||||||
/*{ "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL, "" },*/
|
/*{ "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL, "" },*/
|
||||||
{ "imposter", SQLITE_TESTCTRL_IMPOSTER, "SCHEMA ON/OFF ROOTPAGE"},
|
{ "imposter", SQLITE_TESTCTRL_IMPOSTER, "SCHEMA ON/OFF ROOTPAGE"},
|
||||||
{ "internal_functions", SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, "BOOLEAN" },
|
{ "internal_functions", SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, "" },
|
||||||
{ "localtime_fault", SQLITE_TESTCTRL_LOCALTIME_FAULT,"BOOLEAN" },
|
{ "localtime_fault", SQLITE_TESTCTRL_LOCALTIME_FAULT,"BOOLEAN" },
|
||||||
{ "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT, "BOOLEAN" },
|
{ "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT, "BOOLEAN" },
|
||||||
{ "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS, "DISABLE-MASK" },
|
{ "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS, "DISABLE-MASK" },
|
||||||
@ -17848,7 +17905,6 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
/* sqlite3_test_control(int, int) */
|
/* sqlite3_test_control(int, int) */
|
||||||
case SQLITE_TESTCTRL_ASSERT:
|
case SQLITE_TESTCTRL_ASSERT:
|
||||||
case SQLITE_TESTCTRL_ALWAYS:
|
case SQLITE_TESTCTRL_ALWAYS:
|
||||||
case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS:
|
|
||||||
if( nArg==3 ){
|
if( nArg==3 ){
|
||||||
int opt = booleanValue(azArg[2]);
|
int opt = booleanValue(azArg[2]);
|
||||||
rc2 = sqlite3_test_control(testctrl, opt);
|
rc2 = sqlite3_test_control(testctrl, opt);
|
||||||
@ -17866,6 +17922,12 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* sqlite3_test_control(sqlite3*) */
|
||||||
|
case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS:
|
||||||
|
rc2 = sqlite3_test_control(testctrl, p->db);
|
||||||
|
isOk = 3;
|
||||||
|
break;
|
||||||
|
|
||||||
case SQLITE_TESTCTRL_IMPOSTER:
|
case SQLITE_TESTCTRL_IMPOSTER:
|
||||||
if( nArg==5 ){
|
if( nArg==5 ){
|
||||||
rc2 = sqlite3_test_control(testctrl, p->db,
|
rc2 = sqlite3_test_control(testctrl, p->db,
|
||||||
@ -18496,6 +18558,7 @@ static const char zOptions[] =
|
|||||||
" -multiplex enable the multiplexor VFS\n"
|
" -multiplex enable the multiplexor VFS\n"
|
||||||
#endif
|
#endif
|
||||||
" -newline SEP set output row separator. Default: '\\n'\n"
|
" -newline SEP set output row separator. Default: '\\n'\n"
|
||||||
|
" -nofollow refuse to open symbolic links to database files\n"
|
||||||
" -nullvalue TEXT set text string for NULL values. Default ''\n"
|
" -nullvalue TEXT set text string for NULL values. Default ''\n"
|
||||||
" -pagecache SIZE N use N slots of SZ bytes each for page cache memory\n"
|
" -pagecache SIZE N use N slots of SZ bytes each for page cache memory\n"
|
||||||
" -quote set output mode to 'quote'\n"
|
" -quote set output mode to 'quote'\n"
|
||||||
@ -18806,6 +18869,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
|
|||||||
#endif
|
#endif
|
||||||
}else if( strcmp(z,"-readonly")==0 ){
|
}else if( strcmp(z,"-readonly")==0 ){
|
||||||
data.openMode = SHELL_OPEN_READONLY;
|
data.openMode = SHELL_OPEN_READONLY;
|
||||||
|
}else if( strcmp(z,"-nofollow")==0 ){
|
||||||
|
data.openFlags = SQLITE_OPEN_NOFOLLOW;
|
||||||
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB)
|
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB)
|
||||||
}else if( strncmp(z, "-A",2)==0 ){
|
}else if( strncmp(z, "-A",2)==0 ){
|
||||||
/* All remaining command-line arguments are passed to the ".archive"
|
/* All remaining command-line arguments are passed to the ".archive"
|
||||||
@ -18909,6 +18974,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
|
|||||||
#endif
|
#endif
|
||||||
}else if( strcmp(z,"-readonly")==0 ){
|
}else if( strcmp(z,"-readonly")==0 ){
|
||||||
data.openMode = SHELL_OPEN_READONLY;
|
data.openMode = SHELL_OPEN_READONLY;
|
||||||
|
}else if( strcmp(z,"-nofollow")==0 ){
|
||||||
|
data.openFlags |= SQLITE_OPEN_NOFOLLOW;
|
||||||
}else if( strcmp(z,"-ascii")==0 ){
|
}else if( strcmp(z,"-ascii")==0 ){
|
||||||
data.mode = MODE_Ascii;
|
data.mode = MODE_Ascii;
|
||||||
sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator,
|
sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator,
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -324,6 +324,12 @@ struct sqlite3_api_routines {
|
|||||||
int (*value_frombind)(sqlite3_value*);
|
int (*value_frombind)(sqlite3_value*);
|
||||||
/* Version 3.30.0 and later */
|
/* Version 3.30.0 and later */
|
||||||
int (*drop_modules)(sqlite3*,const char**);
|
int (*drop_modules)(sqlite3*,const char**);
|
||||||
|
/* Version 3.31.0 and later */
|
||||||
|
sqlite3_int64 (*hard_heap_limit64)(sqlite3_int64);
|
||||||
|
const char *(*uri_key)(const char*,int);
|
||||||
|
const char *(*filename_database)(const char*);
|
||||||
|
const char *(*filename_journal)(const char*);
|
||||||
|
const char *(*filename_wal)(const char*);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -618,6 +624,12 @@ typedef int (*sqlite3_loadext_entry)(
|
|||||||
#define sqlite3_value_frombind sqlite3_api->frombind
|
#define sqlite3_value_frombind sqlite3_api->frombind
|
||||||
/* Version 3.30.0 and later */
|
/* Version 3.30.0 and later */
|
||||||
#define sqlite3_drop_modules sqlite3_api->drop_modules
|
#define sqlite3_drop_modules sqlite3_api->drop_modules
|
||||||
|
/* Version 3.31.0 andn later */
|
||||||
|
#define sqlite3_hard_heap_limit64 sqlite3_api->hard_heap_limit64
|
||||||
|
#define sqlite3_uri_key sqlite3_api->uri_key
|
||||||
|
#define sqlite3_filename_database sqlite3_api->filename_database
|
||||||
|
#define sqlite3_filename_journal sqlite3_api->filename_journal
|
||||||
|
#define sqlite3_filename_wal sqlite3_api->filename_wal
|
||||||
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
|
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
|
||||||
|
|
||||||
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
|
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
|
||||||
|
18
contrib/sqlite3/tea/configure
vendored
18
contrib/sqlite3/tea/configure
vendored
@ -1,6 +1,6 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.69 for sqlite 3.30.1.
|
# Generated by GNU Autoconf 2.69 for sqlite 3.31.0.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
|
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
|
||||||
@ -577,8 +577,8 @@ MAKEFLAGS=
|
|||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='sqlite'
|
PACKAGE_NAME='sqlite'
|
||||||
PACKAGE_TARNAME='sqlite'
|
PACKAGE_TARNAME='sqlite'
|
||||||
PACKAGE_VERSION='3.30.1'
|
PACKAGE_VERSION='3.31.0'
|
||||||
PACKAGE_STRING='sqlite 3.30.1'
|
PACKAGE_STRING='sqlite 3.31.0'
|
||||||
PACKAGE_BUGREPORT=''
|
PACKAGE_BUGREPORT=''
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
@ -1303,7 +1303,7 @@ if test "$ac_init_help" = "long"; then
|
|||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures sqlite 3.30.1 to adapt to many kinds of systems.
|
\`configure' configures sqlite 3.31.0 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
@ -1365,7 +1365,7 @@ fi
|
|||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of sqlite 3.30.1:";;
|
short | recursive ) echo "Configuration of sqlite 3.31.0:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
@ -1467,7 +1467,7 @@ fi
|
|||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
sqlite configure 3.30.1
|
sqlite configure 3.31.0
|
||||||
generated by GNU Autoconf 2.69
|
generated by GNU Autoconf 2.69
|
||||||
|
|
||||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
@ -1878,7 +1878,7 @@ cat >config.log <<_ACEOF
|
|||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by sqlite $as_me 3.30.1, which was
|
It was created by sqlite $as_me 3.31.0, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
@ -9373,7 +9373,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by sqlite $as_me 3.30.1, which was
|
This file was extended by sqlite $as_me 3.31.0, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
@ -9426,7 +9426,7 @@ _ACEOF
|
|||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
sqlite config.status 3.30.1
|
sqlite config.status 3.31.0
|
||||||
configured by $0, generated by GNU Autoconf 2.69,
|
configured by $0, generated by GNU Autoconf 2.69,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ dnl to configure the system for the local environment.
|
|||||||
# so you can encode the package version directly into the source files.
|
# so you can encode the package version directly into the source files.
|
||||||
#-----------------------------------------------------------------------
|
#-----------------------------------------------------------------------
|
||||||
|
|
||||||
AC_INIT([sqlite], [3.30.1])
|
AC_INIT([sqlite], [3.31.0])
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
# Call TEA_INIT as the first TEA_ macro to set up initial vars.
|
# Call TEA_INIT as the first TEA_ macro to set up initial vars.
|
||||||
|
@ -2346,20 +2346,22 @@ static int SQLITE_TCLAPI DbObjCmd(
|
|||||||
const char *zName;
|
const char *zName;
|
||||||
int op;
|
int op;
|
||||||
} aDbConfig[] = {
|
} aDbConfig[] = {
|
||||||
|
{ "defensive", SQLITE_DBCONFIG_DEFENSIVE },
|
||||||
|
{ "dqs_ddl", SQLITE_DBCONFIG_DQS_DDL },
|
||||||
|
{ "dqs_dml", SQLITE_DBCONFIG_DQS_DML },
|
||||||
{ "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY },
|
{ "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY },
|
||||||
|
{ "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG },
|
||||||
{ "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER },
|
{ "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER },
|
||||||
{ "enable_view", SQLITE_DBCONFIG_ENABLE_VIEW },
|
{ "enable_view", SQLITE_DBCONFIG_ENABLE_VIEW },
|
||||||
{ "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
|
{ "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER },
|
||||||
|
{ "legacy_alter_table", SQLITE_DBCONFIG_LEGACY_ALTER_TABLE },
|
||||||
|
{ "legacy_file_format", SQLITE_DBCONFIG_LEGACY_FILE_FORMAT },
|
||||||
{ "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
|
{ "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION },
|
||||||
{ "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
|
{ "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE },
|
||||||
{ "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG },
|
|
||||||
{ "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP },
|
|
||||||
{ "reset_database", SQLITE_DBCONFIG_RESET_DATABASE },
|
{ "reset_database", SQLITE_DBCONFIG_RESET_DATABASE },
|
||||||
{ "defensive", SQLITE_DBCONFIG_DEFENSIVE },
|
{ "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP },
|
||||||
|
{ "trusted_schema", SQLITE_DBCONFIG_TRUSTED_SCHEMA },
|
||||||
{ "writable_schema", SQLITE_DBCONFIG_WRITABLE_SCHEMA },
|
{ "writable_schema", SQLITE_DBCONFIG_WRITABLE_SCHEMA },
|
||||||
{ "legacy_alter_table", SQLITE_DBCONFIG_LEGACY_ALTER_TABLE },
|
|
||||||
{ "dqs_dml", SQLITE_DBCONFIG_DQS_DML },
|
|
||||||
{ "dqs_ddl", SQLITE_DBCONFIG_DQS_DDL },
|
|
||||||
};
|
};
|
||||||
Tcl_Obj *pResult;
|
Tcl_Obj *pResult;
|
||||||
int ii;
|
int ii;
|
||||||
@ -2823,6 +2825,7 @@ static int SQLITE_TCLAPI DbObjCmd(
|
|||||||
** --argcount N Function has exactly N arguments
|
** --argcount N Function has exactly N arguments
|
||||||
** --deterministic The function is pure
|
** --deterministic The function is pure
|
||||||
** --directonly Prohibit use inside triggers and views
|
** --directonly Prohibit use inside triggers and views
|
||||||
|
** --innocuous Has no side effects or information leaks
|
||||||
** --returntype TYPE Specify the return type of the function
|
** --returntype TYPE Specify the return type of the function
|
||||||
*/
|
*/
|
||||||
case DB_FUNCTION: {
|
case DB_FUNCTION: {
|
||||||
@ -2859,6 +2862,9 @@ static int SQLITE_TCLAPI DbObjCmd(
|
|||||||
if( n>1 && strncmp(z, "-directonly",n)==0 ){
|
if( n>1 && strncmp(z, "-directonly",n)==0 ){
|
||||||
flags |= SQLITE_DIRECTONLY;
|
flags |= SQLITE_DIRECTONLY;
|
||||||
}else
|
}else
|
||||||
|
if( n>1 && strncmp(z, "-innocuous",n)==0 ){
|
||||||
|
flags |= SQLITE_INNOCUOUS;
|
||||||
|
}else
|
||||||
if( n>1 && strncmp(z, "-returntype", n)==0 ){
|
if( n>1 && strncmp(z, "-returntype", n)==0 ){
|
||||||
const char *azType[] = {"integer", "real", "text", "blob", "any", 0};
|
const char *azType[] = {"integer", "real", "text", "blob", "any", 0};
|
||||||
assert( SQLITE_INTEGER==1 && SQLITE_FLOAT==2 && SQLITE_TEXT==3 );
|
assert( SQLITE_INTEGER==1 && SQLITE_FLOAT==2 && SQLITE_TEXT==3 );
|
||||||
@ -2875,7 +2881,7 @@ static int SQLITE_TCLAPI DbObjCmd(
|
|||||||
}else{
|
}else{
|
||||||
Tcl_AppendResult(interp, "bad option \"", z,
|
Tcl_AppendResult(interp, "bad option \"", z,
|
||||||
"\": must be -argcount, -deterministic, -directonly,"
|
"\": must be -argcount, -deterministic, -directonly,"
|
||||||
" or -returntype", (char*)0
|
" -innocuous, or -returntype", (char*)0
|
||||||
);
|
);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
@ -3675,6 +3681,7 @@ static int sqliteCmdUsage(
|
|||||||
){
|
){
|
||||||
Tcl_WrongNumArgs(interp, 1, objv,
|
Tcl_WrongNumArgs(interp, 1, objv,
|
||||||
"HANDLE ?FILENAME? ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN?"
|
"HANDLE ?FILENAME? ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN?"
|
||||||
|
" ?-nofollow BOOLEAN?"
|
||||||
" ?-nomutex BOOLEAN? ?-fullmutex BOOLEAN? ?-uri BOOLEAN?"
|
" ?-nomutex BOOLEAN? ?-fullmutex BOOLEAN? ?-uri BOOLEAN?"
|
||||||
#if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_CODEC_FROM_TCL)
|
#if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_CODEC_FROM_TCL)
|
||||||
" ?-key CODECKEY?"
|
" ?-key CODECKEY?"
|
||||||
@ -3686,6 +3693,7 @@ static int sqliteCmdUsage(
|
|||||||
/*
|
/*
|
||||||
** sqlite3 DBNAME FILENAME ?-vfs VFSNAME? ?-key KEY? ?-readonly BOOLEAN?
|
** sqlite3 DBNAME FILENAME ?-vfs VFSNAME? ?-key KEY? ?-readonly BOOLEAN?
|
||||||
** ?-create BOOLEAN? ?-nomutex BOOLEAN?
|
** ?-create BOOLEAN? ?-nomutex BOOLEAN?
|
||||||
|
** ?-nofollow BOOLEAN?
|
||||||
**
|
**
|
||||||
** This is the main Tcl command. When the "sqlite" Tcl command is
|
** This is the main Tcl command. When the "sqlite" Tcl command is
|
||||||
** invoked, this routine runs to process that command.
|
** invoked, this routine runs to process that command.
|
||||||
@ -3784,6 +3792,14 @@ static int SQLITE_TCLAPI DbMain(
|
|||||||
}else{
|
}else{
|
||||||
flags &= ~SQLITE_OPEN_CREATE;
|
flags &= ~SQLITE_OPEN_CREATE;
|
||||||
}
|
}
|
||||||
|
}else if( strcmp(zArg, "-nofollow")==0 ){
|
||||||
|
int b;
|
||||||
|
if( Tcl_GetBooleanFromObj(interp, objv[i], &b) ) return TCL_ERROR;
|
||||||
|
if( b ){
|
||||||
|
flags |= SQLITE_OPEN_NOFOLLOW;
|
||||||
|
}else{
|
||||||
|
flags &= ~SQLITE_OPEN_NOFOLLOW;
|
||||||
|
}
|
||||||
}else if( strcmp(zArg, "-nomutex")==0 ){
|
}else if( strcmp(zArg, "-nomutex")==0 ){
|
||||||
int b;
|
int b;
|
||||||
if( Tcl_GetBooleanFromObj(interp, objv[i], &b) ) return TCL_ERROR;
|
if( Tcl_GetBooleanFromObj(interp, objv[i], &b) ) return TCL_ERROR;
|
||||||
|
@ -153,7 +153,7 @@ Please `cd` to its location first.
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
PROJECT = sqlite3
|
PROJECT = tclsqlite3
|
||||||
!include "rules.vc"
|
!include "rules.vc"
|
||||||
|
|
||||||
# nmakehelp -V <file> <tag> will search the file for tag, skips until a
|
# nmakehelp -V <file> <tag> will search the file for tag, skips until a
|
||||||
@ -162,18 +162,15 @@ PROJECT = sqlite3
|
|||||||
|
|
||||||
!if [echo REM = This file is generated from Makefile.vc > versions.vc]
|
!if [echo REM = This file is generated from Makefile.vc > versions.vc]
|
||||||
!endif
|
!endif
|
||||||
# get project version from row "AC_INIT([sqlite], [3.7.14])"
|
# get project version from row "AC_INIT([sqlite], [3.x.y])"
|
||||||
!if [echo DOTVERSION = \>> versions.vc] \
|
!if [echo DOTVERSION = \>> versions.vc] \
|
||||||
&& [nmakehlp -V ..\configure.in AC_INIT >> versions.vc]
|
&& [nmakehlp -V ..\configure.ac AC_INIT >> versions.vc]
|
||||||
!endif
|
!endif
|
||||||
!include "versions.vc"
|
!include "versions.vc"
|
||||||
|
|
||||||
VERSION = $(DOTVERSION:.=)
|
VERSION = $(DOTVERSION:.=)
|
||||||
STUBPREFIX = $(PROJECT)stub
|
STUBPREFIX = $(PROJECT)stub
|
||||||
|
|
||||||
DLLOBJS = \
|
|
||||||
$(TMP_DIR)\tclsqlite3.obj
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
# Target names and paths ( shouldn't need changing )
|
# Target names and paths ( shouldn't need changing )
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
@ -182,7 +179,7 @@ BINROOT = .
|
|||||||
ROOT = ..
|
ROOT = ..
|
||||||
|
|
||||||
PRJIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
|
PRJIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
|
||||||
PRJLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
|
PRJLIBNAME = $(PROJECT).$(EXT)
|
||||||
PRJLIB = $(OUT_DIR)\$(PRJLIBNAME)
|
PRJLIB = $(OUT_DIR)\$(PRJLIBNAME)
|
||||||
|
|
||||||
PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
|
PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
|
||||||
@ -204,6 +201,17 @@ DOCDIR = $(ROOT)\doc
|
|||||||
TOOLSDIR = $(ROOT)\tools
|
TOOLSDIR = $(ROOT)\tools
|
||||||
COMPATDIR = $(ROOT)\compat
|
COMPATDIR = $(ROOT)\compat
|
||||||
|
|
||||||
|
### Figure out where the primary source code file(s) is/are.
|
||||||
|
!if exist("$(ROOT)\..\..\sqlite3.c") && exist("$(ROOT)\..\..\src\tclsqlite.c")
|
||||||
|
SQL_INCLUDES = -I"$(ROOT)\..\.."
|
||||||
|
SQLITE_SRCDIR = $(ROOT)\..\..
|
||||||
|
TCLSQLITE_SRCDIR = $(ROOT)\..\..\src
|
||||||
|
DLLOBJS = $(TMP_DIR)\sqlite3.obj $(TMP_DIR)\tclsqlite.obj
|
||||||
|
!else
|
||||||
|
TCLSQLITE_SRCDIR = $(ROOT)\generic
|
||||||
|
DLLOBJS = $(TMP_DIR)\tclsqlite3.obj
|
||||||
|
!endif
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
# Compile flags
|
# Compile flags
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
@ -223,7 +231,7 @@ cdebug = -Z7 -WX -Od -GZ
|
|||||||
!endif
|
!endif
|
||||||
|
|
||||||
### Declarations common to all compiler options
|
### Declarations common to all compiler options
|
||||||
cflags = -nologo -c -W3 -YX -Fp$(TMP_DIR)^\
|
cflags = -nologo -c -W3 -D_CRT_SECURE_NO_WARNINGS -YX -Fp$(TMP_DIR)^\
|
||||||
|
|
||||||
!if $(MSVCRT)
|
!if $(MSVCRT)
|
||||||
!if $(DEBUG)
|
!if $(DEBUG)
|
||||||
@ -239,8 +247,8 @@ crt = -MT
|
|||||||
!endif
|
!endif
|
||||||
!endif
|
!endif
|
||||||
|
|
||||||
INCLUDES = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)" \
|
INCLUDES = $(SQL_INCLUDES) $(TCL_INCLUDES) -I"$(WINDIR)" \
|
||||||
-I"$(ROOT)\.."
|
-I"$(GENERICDIR)" -I"$(ROOT)\.."
|
||||||
BASE_CLFAGS = $(cflags) $(cdebug) $(crt) $(INCLUDES) \
|
BASE_CLFAGS = $(cflags) $(cdebug) $(crt) $(INCLUDES) \
|
||||||
-DSQLITE_3_SUFFIX_ONLY=1 -DSQLITE_ENABLE_RTREE=1 \
|
-DSQLITE_3_SUFFIX_ONLY=1 -DSQLITE_ENABLE_RTREE=1 \
|
||||||
-DSQLITE_ENABLE_FTS3=1 -DSQLITE_OMIT_DEPRECATED=1
|
-DSQLITE_ENABLE_FTS3=1 -DSQLITE_OMIT_DEPRECATED=1
|
||||||
@ -341,20 +349,17 @@ $(PRJSTUBLIB): $(PRJSTUBOBJS)
|
|||||||
# Implicit rules
|
# Implicit rules
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
{$(WINDIR)}.c{$(TMP_DIR)}.obj::
|
$(TMP_DIR)\sqlite3.obj: $(SQLITE_SRCDIR)\sqlite3.c
|
||||||
$(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
|
$(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ \
|
||||||
$<
|
-c $(SQLITE_SRCDIR)\sqlite3.c
|
||||||
<<
|
|
||||||
|
|
||||||
{$(GENERICDIR)}.c{$(TMP_DIR)}.obj::
|
$(TMP_DIR)\tclsqlite.obj: $(TCLSQLITE_SRCDIR)\tclsqlite.c
|
||||||
$(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
|
$(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ \
|
||||||
$<
|
-c $(TCLSQLITE_SRCDIR)\tclsqlite.c
|
||||||
<<
|
|
||||||
|
|
||||||
{$(COMPATDIR)}.c{$(TMP_DIR)}.obj::
|
$(TMP_DIR)\tclsqlite3.obj: $(TCLSQLITE_SRCDIR)\tclsqlite3.c
|
||||||
$(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<<
|
$(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ \
|
||||||
$<
|
-c $(TCLSQLITE_SRCDIR)\tclsqlite3.c
|
||||||
<<
|
|
||||||
|
|
||||||
{$(WINDIR)}.rc{$(TMP_DIR)}.res:
|
{$(WINDIR)}.rc{$(TMP_DIR)}.res:
|
||||||
$(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \
|
$(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \
|
||||||
|
Loading…
Reference in New Issue
Block a user