Merge pull request #1224 from gwenn/3.39.3

Upgrade SQLite bundled version to 3.39.3
This commit is contained in:
gwenn 2022-09-12 19:01:23 +02:00 committed by GitHub
commit 5a41ab869a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 636 additions and 36 deletions

View File

@ -1,9 +1,9 @@
/* automatically generated by rust-bindgen 0.60.1 */
pub const SQLITE_VERSION: &[u8; 7usize] = b"3.39.2\0";
pub const SQLITE_VERSION_NUMBER: i32 = 3039002;
pub const SQLITE_VERSION: &[u8; 7usize] = b"3.39.3\0";
pub const SQLITE_VERSION_NUMBER: i32 = 3039003;
pub const SQLITE_SOURCE_ID: &[u8; 85usize] =
b"2022-07-21 15:24:47 698edb77537b67c41adc68f9b892db56bcf9a55e00371a61420f3ddd668e6603\0";
b"2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8\0";
pub const SQLITE_OK: i32 = 0;
pub const SQLITE_ERROR: i32 = 1;
pub const SQLITE_INTERNAL: i32 = 2;
@ -454,6 +454,20 @@ pub const SQLITE_DESERIALIZE_READONLY: i32 = 4;
pub const NOT_WITHIN: i32 = 0;
pub const PARTLY_WITHIN: i32 = 1;
pub const FULLY_WITHIN: i32 = 2;
pub const __SQLITESESSION_H_: i32 = 1;
pub const SQLITE_SESSION_OBJCONFIG_SIZE: i32 = 1;
pub const SQLITE_CHANGESETSTART_INVERT: i32 = 2;
pub const SQLITE_CHANGESETAPPLY_NOSAVEPOINT: i32 = 1;
pub const SQLITE_CHANGESETAPPLY_INVERT: i32 = 2;
pub const SQLITE_CHANGESET_DATA: i32 = 1;
pub const SQLITE_CHANGESET_NOTFOUND: i32 = 2;
pub const SQLITE_CHANGESET_CONFLICT: i32 = 3;
pub const SQLITE_CHANGESET_CONSTRAINT: i32 = 4;
pub const SQLITE_CHANGESET_FOREIGN_KEY: i32 = 5;
pub const SQLITE_CHANGESET_OMIT: i32 = 0;
pub const SQLITE_CHANGESET_REPLACE: i32 = 1;
pub const SQLITE_CHANGESET_ABORT: i32 = 2;
pub const SQLITE_SESSION_CONFIG_STRMSIZE: i32 = 1;
pub const FTS5_TOKENIZE_QUERY: i32 = 1;
pub const FTS5_TOKENIZE_PREFIX: i32 = 2;
pub const FTS5_TOKENIZE_DOCUMENT: i32 = 4;
@ -2704,6 +2718,46 @@ extern "C" {
extern "C" {
pub fn sqlite3_db_cacheflush(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3_preupdate_hook(
db: *mut sqlite3,
xPreUpdate: ::std::option::Option<
unsafe extern "C" fn(
pCtx: *mut ::std::os::raw::c_void,
db: *mut sqlite3,
op: ::std::os::raw::c_int,
zDb: *const ::std::os::raw::c_char,
zName: *const ::std::os::raw::c_char,
iKey1: sqlite3_int64,
iKey2: sqlite3_int64,
),
>,
arg1: *mut ::std::os::raw::c_void,
) -> *mut ::std::os::raw::c_void;
}
extern "C" {
pub fn sqlite3_preupdate_old(
arg1: *mut sqlite3,
arg2: ::std::os::raw::c_int,
arg3: *mut *mut sqlite3_value,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3_preupdate_count(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3_preupdate_depth(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3_preupdate_new(
arg1: *mut sqlite3,
arg2: ::std::os::raw::c_int,
arg3: *mut *mut sqlite3_value,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3_preupdate_blobwrite(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3_system_errno(arg1: *mut sqlite3) -> ::std::os::raw::c_int;
}
@ -2817,6 +2871,484 @@ pub struct sqlite3_rtree_query_info {
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct sqlite3_session {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct sqlite3_changeset_iter {
_unused: [u8; 0],
}
extern "C" {
pub fn sqlite3session_create(
db: *mut sqlite3,
zDb: *const ::std::os::raw::c_char,
ppSession: *mut *mut sqlite3_session,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_delete(pSession: *mut sqlite3_session);
}
extern "C" {
pub fn sqlite3session_object_config(
arg1: *mut sqlite3_session,
op: ::std::os::raw::c_int,
pArg: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_enable(
pSession: *mut sqlite3_session,
bEnable: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_indirect(
pSession: *mut sqlite3_session,
bIndirect: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_attach(
pSession: *mut sqlite3_session,
zTab: *const ::std::os::raw::c_char,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_table_filter(
pSession: *mut sqlite3_session,
xFilter: ::std::option::Option<
unsafe extern "C" fn(
pCtx: *mut ::std::os::raw::c_void,
zTab: *const ::std::os::raw::c_char,
) -> ::std::os::raw::c_int,
>,
pCtx: *mut ::std::os::raw::c_void,
);
}
extern "C" {
pub fn sqlite3session_changeset(
pSession: *mut sqlite3_session,
pnChangeset: *mut ::std::os::raw::c_int,
ppChangeset: *mut *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_changeset_size(pSession: *mut sqlite3_session) -> sqlite3_int64;
}
extern "C" {
pub fn sqlite3session_diff(
pSession: *mut sqlite3_session,
zFromDb: *const ::std::os::raw::c_char,
zTbl: *const ::std::os::raw::c_char,
pzErrMsg: *mut *mut ::std::os::raw::c_char,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_patchset(
pSession: *mut sqlite3_session,
pnPatchset: *mut ::std::os::raw::c_int,
ppPatchset: *mut *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_isempty(pSession: *mut sqlite3_session) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_memory_used(pSession: *mut sqlite3_session) -> sqlite3_int64;
}
extern "C" {
pub fn sqlite3changeset_start(
pp: *mut *mut sqlite3_changeset_iter,
nChangeset: ::std::os::raw::c_int,
pChangeset: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_start_v2(
pp: *mut *mut sqlite3_changeset_iter,
nChangeset: ::std::os::raw::c_int,
pChangeset: *mut ::std::os::raw::c_void,
flags: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_next(pIter: *mut sqlite3_changeset_iter) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_op(
pIter: *mut sqlite3_changeset_iter,
pzTab: *mut *const ::std::os::raw::c_char,
pnCol: *mut ::std::os::raw::c_int,
pOp: *mut ::std::os::raw::c_int,
pbIndirect: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_pk(
pIter: *mut sqlite3_changeset_iter,
pabPK: *mut *mut ::std::os::raw::c_uchar,
pnCol: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_old(
pIter: *mut sqlite3_changeset_iter,
iVal: ::std::os::raw::c_int,
ppValue: *mut *mut sqlite3_value,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_new(
pIter: *mut sqlite3_changeset_iter,
iVal: ::std::os::raw::c_int,
ppValue: *mut *mut sqlite3_value,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_conflict(
pIter: *mut sqlite3_changeset_iter,
iVal: ::std::os::raw::c_int,
ppValue: *mut *mut sqlite3_value,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_fk_conflicts(
pIter: *mut sqlite3_changeset_iter,
pnOut: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_finalize(pIter: *mut sqlite3_changeset_iter) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_invert(
nIn: ::std::os::raw::c_int,
pIn: *const ::std::os::raw::c_void,
pnOut: *mut ::std::os::raw::c_int,
ppOut: *mut *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_concat(
nA: ::std::os::raw::c_int,
pA: *mut ::std::os::raw::c_void,
nB: ::std::os::raw::c_int,
pB: *mut ::std::os::raw::c_void,
pnOut: *mut ::std::os::raw::c_int,
ppOut: *mut *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct sqlite3_changegroup {
_unused: [u8; 0],
}
extern "C" {
pub fn sqlite3changegroup_new(pp: *mut *mut sqlite3_changegroup) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changegroup_add(
arg1: *mut sqlite3_changegroup,
nData: ::std::os::raw::c_int,
pData: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changegroup_output(
arg1: *mut sqlite3_changegroup,
pnData: *mut ::std::os::raw::c_int,
ppData: *mut *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changegroup_delete(arg1: *mut sqlite3_changegroup);
}
extern "C" {
pub fn sqlite3changeset_apply(
db: *mut sqlite3,
nChangeset: ::std::os::raw::c_int,
pChangeset: *mut ::std::os::raw::c_void,
xFilter: ::std::option::Option<
unsafe extern "C" fn(
pCtx: *mut ::std::os::raw::c_void,
zTab: *const ::std::os::raw::c_char,
) -> ::std::os::raw::c_int,
>,
xConflict: ::std::option::Option<
unsafe extern "C" fn(
pCtx: *mut ::std::os::raw::c_void,
eConflict: ::std::os::raw::c_int,
p: *mut sqlite3_changeset_iter,
) -> ::std::os::raw::c_int,
>,
pCtx: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_apply_v2(
db: *mut sqlite3,
nChangeset: ::std::os::raw::c_int,
pChangeset: *mut ::std::os::raw::c_void,
xFilter: ::std::option::Option<
unsafe extern "C" fn(
pCtx: *mut ::std::os::raw::c_void,
zTab: *const ::std::os::raw::c_char,
) -> ::std::os::raw::c_int,
>,
xConflict: ::std::option::Option<
unsafe extern "C" fn(
pCtx: *mut ::std::os::raw::c_void,
eConflict: ::std::os::raw::c_int,
p: *mut sqlite3_changeset_iter,
) -> ::std::os::raw::c_int,
>,
pCtx: *mut ::std::os::raw::c_void,
ppRebase: *mut *mut ::std::os::raw::c_void,
pnRebase: *mut ::std::os::raw::c_int,
flags: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct sqlite3_rebaser {
_unused: [u8; 0],
}
extern "C" {
pub fn sqlite3rebaser_create(ppNew: *mut *mut sqlite3_rebaser) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3rebaser_configure(
arg1: *mut sqlite3_rebaser,
nRebase: ::std::os::raw::c_int,
pRebase: *const ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3rebaser_rebase(
arg1: *mut sqlite3_rebaser,
nIn: ::std::os::raw::c_int,
pIn: *const ::std::os::raw::c_void,
pnOut: *mut ::std::os::raw::c_int,
ppOut: *mut *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3rebaser_delete(p: *mut sqlite3_rebaser);
}
extern "C" {
pub fn sqlite3changeset_apply_strm(
db: *mut sqlite3,
xInput: ::std::option::Option<
unsafe extern "C" fn(
pIn: *mut ::std::os::raw::c_void,
pData: *mut ::std::os::raw::c_void,
pnData: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pIn: *mut ::std::os::raw::c_void,
xFilter: ::std::option::Option<
unsafe extern "C" fn(
pCtx: *mut ::std::os::raw::c_void,
zTab: *const ::std::os::raw::c_char,
) -> ::std::os::raw::c_int,
>,
xConflict: ::std::option::Option<
unsafe extern "C" fn(
pCtx: *mut ::std::os::raw::c_void,
eConflict: ::std::os::raw::c_int,
p: *mut sqlite3_changeset_iter,
) -> ::std::os::raw::c_int,
>,
pCtx: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_apply_v2_strm(
db: *mut sqlite3,
xInput: ::std::option::Option<
unsafe extern "C" fn(
pIn: *mut ::std::os::raw::c_void,
pData: *mut ::std::os::raw::c_void,
pnData: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pIn: *mut ::std::os::raw::c_void,
xFilter: ::std::option::Option<
unsafe extern "C" fn(
pCtx: *mut ::std::os::raw::c_void,
zTab: *const ::std::os::raw::c_char,
) -> ::std::os::raw::c_int,
>,
xConflict: ::std::option::Option<
unsafe extern "C" fn(
pCtx: *mut ::std::os::raw::c_void,
eConflict: ::std::os::raw::c_int,
p: *mut sqlite3_changeset_iter,
) -> ::std::os::raw::c_int,
>,
pCtx: *mut ::std::os::raw::c_void,
ppRebase: *mut *mut ::std::os::raw::c_void,
pnRebase: *mut ::std::os::raw::c_int,
flags: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_concat_strm(
xInputA: ::std::option::Option<
unsafe extern "C" fn(
pIn: *mut ::std::os::raw::c_void,
pData: *mut ::std::os::raw::c_void,
pnData: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pInA: *mut ::std::os::raw::c_void,
xInputB: ::std::option::Option<
unsafe extern "C" fn(
pIn: *mut ::std::os::raw::c_void,
pData: *mut ::std::os::raw::c_void,
pnData: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pInB: *mut ::std::os::raw::c_void,
xOutput: ::std::option::Option<
unsafe extern "C" fn(
pOut: *mut ::std::os::raw::c_void,
pData: *const ::std::os::raw::c_void,
nData: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pOut: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_invert_strm(
xInput: ::std::option::Option<
unsafe extern "C" fn(
pIn: *mut ::std::os::raw::c_void,
pData: *mut ::std::os::raw::c_void,
pnData: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pIn: *mut ::std::os::raw::c_void,
xOutput: ::std::option::Option<
unsafe extern "C" fn(
pOut: *mut ::std::os::raw::c_void,
pData: *const ::std::os::raw::c_void,
nData: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pOut: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_start_strm(
pp: *mut *mut sqlite3_changeset_iter,
xInput: ::std::option::Option<
unsafe extern "C" fn(
pIn: *mut ::std::os::raw::c_void,
pData: *mut ::std::os::raw::c_void,
pnData: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pIn: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changeset_start_v2_strm(
pp: *mut *mut sqlite3_changeset_iter,
xInput: ::std::option::Option<
unsafe extern "C" fn(
pIn: *mut ::std::os::raw::c_void,
pData: *mut ::std::os::raw::c_void,
pnData: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pIn: *mut ::std::os::raw::c_void,
flags: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_changeset_strm(
pSession: *mut sqlite3_session,
xOutput: ::std::option::Option<
unsafe extern "C" fn(
pOut: *mut ::std::os::raw::c_void,
pData: *const ::std::os::raw::c_void,
nData: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pOut: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_patchset_strm(
pSession: *mut sqlite3_session,
xOutput: ::std::option::Option<
unsafe extern "C" fn(
pOut: *mut ::std::os::raw::c_void,
pData: *const ::std::os::raw::c_void,
nData: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pOut: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changegroup_add_strm(
arg1: *mut sqlite3_changegroup,
xInput: ::std::option::Option<
unsafe extern "C" fn(
pIn: *mut ::std::os::raw::c_void,
pData: *mut ::std::os::raw::c_void,
pnData: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pIn: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3changegroup_output_strm(
arg1: *mut sqlite3_changegroup,
xOutput: ::std::option::Option<
unsafe extern "C" fn(
pOut: *mut ::std::os::raw::c_void,
pData: *const ::std::os::raw::c_void,
nData: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pOut: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3rebaser_rebase_strm(
pRebaser: *mut sqlite3_rebaser,
xInput: ::std::option::Option<
unsafe extern "C" fn(
pIn: *mut ::std::os::raw::c_void,
pData: *mut ::std::os::raw::c_void,
pnData: *mut ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pIn: *mut ::std::os::raw::c_void,
xOutput: ::std::option::Option<
unsafe extern "C" fn(
pOut: *mut ::std::os::raw::c_void,
pData: *const ::std::os::raw::c_void,
nData: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int,
>,
pOut: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn sqlite3session_config(
op: ::std::os::raw::c_int,
pArg: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct Fts5Context {
_unused: [u8; 0],
}

View File

@ -1,6 +1,6 @@
/******************************************************************************
** This file is an amalgamation of many separate C source files from SQLite
** version 3.39.2. By combining all the individual C code files into this
** version 3.39.3. By combining all the individual C code files into this
** single large file, the entire code can be compiled as a single translation
** unit. This allows many compilers to do optimizations that would not be
** possible if the files were compiled separately. Performance improvements
@ -452,9 +452,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
#define SQLITE_VERSION "3.39.2"
#define SQLITE_VERSION_NUMBER 3039002
#define SQLITE_SOURCE_ID "2022-07-21 15:24:47 698edb77537b67c41adc68f9b892db56bcf9a55e00371a61420f3ddd668e6603"
#define SQLITE_VERSION "3.39.3"
#define SQLITE_VERSION_NUMBER 3039003
#define SQLITE_SOURCE_ID "2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8"
/*
** CAPI3REF: Run-Time Library Version Numbers
@ -13144,6 +13144,11 @@ struct fts5_api {
/************** End of sqlite3.h *********************************************/
/************** Continuing where we left off in sqliteInt.h ******************/
/*
** Reuse the STATIC_LRU for mutex access to sqlite3_temp_directory.
*/
#define SQLITE_MUTEX_STATIC_TEMPDIR SQLITE_MUTEX_STATIC_VFS1
/*
** Include the configuration header output by 'configure' if we're using the
** autoconf-based build
@ -29563,8 +29568,13 @@ SQLITE_PRIVATE void *sqlite3OomFault(sqlite3 *db){
}
DisableLookaside;
if( db->pParse ){
Parse *pParse;
sqlite3ErrorMsg(db->pParse, "out of memory");
db->pParse->rc = SQLITE_NOMEM_BKPT;
for(pParse=db->pParse->pOuterParse; pParse; pParse = pParse->pOuterParse){
pParse->nErr++;
pParse->rc = SQLITE_NOMEM;
}
}
}
return 0;
@ -33459,7 +33469,7 @@ SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
va_list ap;
sqlite3 *db = pParse->db;
assert( db!=0 );
assert( db->pParse==pParse );
assert( db->pParse==pParse || db->pParse->pToplevel==pParse );
db->errByteOffset = -2;
va_start(ap, zFormat);
zMsg = sqlite3VMPrintf(db, zFormat, ap);
@ -41320,6 +41330,7 @@ static const char *unixTempFileDir(void){
static int unixGetTempname(int nBuf, char *zBuf){
const char *zDir;
int iLimit = 0;
int rc = SQLITE_OK;
/* It's odd to simulate an io-error here, but really this is just
** using the io-error infrastructure to test that SQLite handles this
@ -41328,18 +41339,26 @@ static int unixGetTempname(int nBuf, char *zBuf){
zBuf[0] = 0;
SimulateIOError( return SQLITE_IOERR );
sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
zDir = unixTempFileDir();
if( zDir==0 ) return SQLITE_IOERR_GETTEMPPATH;
do{
u64 r;
sqlite3_randomness(sizeof(r), &r);
assert( nBuf>2 );
zBuf[nBuf-2] = 0;
sqlite3_snprintf(nBuf, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX"%llx%c",
zDir, r, 0);
if( zBuf[nBuf-2]!=0 || (iLimit++)>10 ) return SQLITE_ERROR;
}while( osAccess(zBuf,0)==0 );
return SQLITE_OK;
if( zDir==0 ){
rc = SQLITE_IOERR_GETTEMPPATH;
}else{
do{
u64 r;
sqlite3_randomness(sizeof(r), &r);
assert( nBuf>2 );
zBuf[nBuf-2] = 0;
sqlite3_snprintf(nBuf, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX"%llx%c",
zDir, r, 0);
if( zBuf[nBuf-2]!=0 || (iLimit++)>10 ){
rc = SQLITE_ERROR;
break;
}
}while( osAccess(zBuf,0)==0 );
}
sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
return rc;
}
#if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
@ -45482,6 +45501,7 @@ SQLITE_API int sqlite3_win32_set_directory8(
int rc = sqlite3_initialize();
if( rc ) return rc;
#endif
sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
if( type==SQLITE_WIN32_DATA_DIRECTORY_TYPE ){
ppDirectory = &sqlite3_data_directory;
}else if( type==SQLITE_WIN32_TEMP_DIRECTORY_TYPE ){
@ -45496,14 +45516,19 @@ SQLITE_API int sqlite3_win32_set_directory8(
if( zValue && zValue[0] ){
zCopy = sqlite3_mprintf("%s", zValue);
if ( zCopy==0 ){
return SQLITE_NOMEM_BKPT;
rc = SQLITE_NOMEM_BKPT;
goto set_directory8_done;
}
}
sqlite3_free(*ppDirectory);
*ppDirectory = zCopy;
return SQLITE_OK;
rc = SQLITE_OK;
}else{
rc = SQLITE_ERROR;
}
return SQLITE_ERROR;
set_directory8_done:
sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
return rc;
}
/*
@ -48277,6 +48302,18 @@ static int winMakeEndInDirSep(int nBuf, char *zBuf){
return 0;
}
/*
** If sqlite3_temp_directory is not, take the mutex and return true.
**
** If sqlite3_temp_directory is NULL, omit the mutex and return false.
*/
static int winTempDirDefined(void){
sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
if( sqlite3_temp_directory!=0 ) return 1;
sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
return 0;
}
/*
** Create a temporary file name and store the resulting pointer into pzBuf.
** The pointer returned in pzBuf must be freed via sqlite3_free().
@ -48313,20 +48350,23 @@ static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){
*/
nDir = nMax - (nPre + 15);
assert( nDir>0 );
if( sqlite3_temp_directory ){
if( winTempDirDefined() ){
int nDirLen = sqlite3Strlen30(sqlite3_temp_directory);
if( nDirLen>0 ){
if( !winIsDirSep(sqlite3_temp_directory[nDirLen-1]) ){
nDirLen++;
}
if( nDirLen>nDir ){
sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
sqlite3_free(zBuf);
OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n"));
return winLogError(SQLITE_ERROR, 0, "winGetTempname1", 0);
}
sqlite3_snprintf(nMax, zBuf, "%s", sqlite3_temp_directory);
}
sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
}
#if defined(__CYGWIN__)
else{
static const char *azDirs[] = {
@ -49115,7 +49155,7 @@ static BOOL winIsVerbatimPathname(
** pathname into zOut[]. zOut[] will be at least pVfs->mxPathname
** bytes in size.
*/
static int winFullPathname(
static int winFullPathnameNoMutex(
sqlite3_vfs *pVfs, /* Pointer to vfs object */
const char *zRelative, /* Possibly relative input path */
int nFull, /* Size of output buffer in bytes */
@ -49294,6 +49334,19 @@ static int winFullPathname(
}
#endif
}
static int winFullPathname(
sqlite3_vfs *pVfs, /* Pointer to vfs object */
const char *zRelative, /* Possibly relative input path */
int nFull, /* Size of output buffer in bytes */
char *zFull /* Output buffer */
){
int rc;
sqlite3_mutex *pMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR);
sqlite3_mutex_enter(pMutex);
rc = winFullPathnameNoMutex(pVfs, zRelative, nFull, zFull);
sqlite3_mutex_leave(pMutex);
return rc;
}
#ifndef SQLITE_OMIT_LOAD_EXTENSION
/*
@ -59676,6 +59729,7 @@ static int pager_open_journal(Pager *pPager){
if( rc!=SQLITE_OK ){
sqlite3BitvecDestroy(pPager->pInJournal);
pPager->pInJournal = 0;
pPager->journalOff = 0;
}else{
assert( pPager->eState==PAGER_WRITER_LOCKED );
pPager->eState = PAGER_WRITER_CACHEMOD;
@ -61231,7 +61285,7 @@ SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager *pPager){
SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager *pPager){
assert( assert_pager_state(pPager) );
if( pPager->eState>=PAGER_WRITER_CACHEMOD ) return 0;
if( NEVER(isOpen(pPager->jfd) && pPager->journalOff>0) ) return 0;
if( isOpen(pPager->jfd) && pPager->journalOff>0 ) return 0;
return 1;
}
@ -81035,6 +81089,7 @@ SQLITE_PRIVATE int sqlite3VdbeAddFunctionCall(
addr = sqlite3VdbeAddOp4(v, eCallCtx ? OP_PureFunc : OP_Function,
p1, p2, p3, (char*)pCtx, P4_FUNCCTX);
sqlite3VdbeChangeP5(v, eCallCtx & NC_SelfRef);
sqlite3MayAbort(pParse);
return addr;
}
@ -81370,6 +81425,7 @@ SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
|| opcode==OP_VDestroy
|| opcode==OP_VCreate
|| opcode==OP_ParseSchema
|| opcode==OP_Function || opcode==OP_PureFunc
|| ((opcode==OP_Halt || opcode==OP_HaltIfNull)
&& ((pOp->p1)!=SQLITE_OK && pOp->p2==OE_Abort))
){
@ -132704,6 +132760,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
**
*/
case PragTyp_TEMP_STORE_DIRECTORY: {
sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
if( !zRight ){
returnSingleText(v, sqlite3_temp_directory);
}else{
@ -132713,6 +132770,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
if( rc!=SQLITE_OK || res==0 ){
sqlite3ErrorMsg(pParse, "not a writable directory");
sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
goto pragma_out;
}
}
@ -132730,6 +132788,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
}
#endif /* SQLITE_OMIT_WSD */
}
sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
break;
}
@ -132748,6 +132807,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
**
*/
case PragTyp_DATA_STORE_DIRECTORY: {
sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
if( !zRight ){
returnSingleText(v, sqlite3_data_directory);
}else{
@ -132757,6 +132817,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
if( rc!=SQLITE_OK || res==0 ){
sqlite3ErrorMsg(pParse, "not a writable directory");
sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
goto pragma_out;
}
}
@ -132768,6 +132829,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
}
#endif /* SQLITE_OMIT_WSD */
}
sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR));
break;
}
#endif
@ -137213,7 +137275,7 @@ static void generateSortTail(
if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce);
addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak);
VdbeCoverage(v);
codeOffset(v, p->iOffset, addrContinue);
assert( p->iLimit==0 && p->iOffset==0 );
sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab);
bSeq = 0;
}else{
@ -137221,6 +137283,9 @@ static void generateSortTail(
codeOffset(v, p->iOffset, addrContinue);
iSortTab = iTab;
bSeq = 1;
if( p->iOffset>0 ){
sqlite3VdbeAddOp2(v, OP_AddImm, p->iLimit, -1);
}
}
for(i=0, iCol=nKey+bSeq-1; i<nColumn; i++){
#ifdef SQLITE_ENABLE_SORTER_REFERENCES
@ -139213,10 +139278,11 @@ static int multiSelectOrderBy(
*/
sqlite3VdbeResolveLabel(v, labelEnd);
/* Reassembly the compound query so that it will be freed correctly
/* Reassemble the compound query so that it will be freed correctly
** by the calling function */
if( pSplit->pPrior ){
sqlite3SelectDelete(db, pSplit->pPrior);
sqlite3ParserAddCleanup(pParse,
(void(*)(sqlite3*,void*))sqlite3SelectDelete, pSplit->pPrior);
}
pSplit->pPrior = pPrior;
pPrior->pNext = pSplit;
@ -140735,6 +140801,7 @@ static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){
|| p->pSrc->nSrc!=1
|| p->pSrc->a[0].pSelect
|| pAggInfo->nFunc!=1
|| p->pHaving
){
return 0;
}
@ -149783,7 +149850,8 @@ static int codeEqualityTerm(
}
sqlite3ExprDelete(db, pX);
}else{
aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*nEq);
int n = sqlite3ExprVectorSize(pX->pLeft);
aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*MAX(nEq,n));
eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap, &iTab);
}
pX = pExpr;
@ -181120,7 +181188,7 @@ static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){
nDistance = iPrev - nMaxUndeferred;
}
aOut = (char *)sqlite3_malloc(nPoslist+8);
aOut = (char *)sqlite3Fts3MallocZero(nPoslist+FTS3_BUFFER_PADDING);
if( !aOut ){
sqlite3_free(aPoslist);
return SQLITE_NOMEM;
@ -204146,7 +204214,7 @@ static int geopolyUpdate(
sqlite3_free(p);
nChange = 1;
}
for(jj=1; jj<pRtree->nAux; jj++){
for(jj=1; jj<nData-2; jj++){
nChange++;
sqlite3_bind_value(pUp, jj+2, aData[jj+2]);
}
@ -236636,7 +236704,7 @@ static void fts5SourceIdFunc(
){
assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused);
sqlite3_result_text(pCtx, "fts5: 2022-07-21 15:24:47 698edb77537b67c41adc68f9b892db56bcf9a55e00371a61420f3ddd668e6603", -1, SQLITE_TRANSIENT);
sqlite3_result_text(pCtx, "fts5: 2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8", -1, SQLITE_TRANSIENT);
}
/*

View File

@ -146,9 +146,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
#define SQLITE_VERSION "3.39.2"
#define SQLITE_VERSION_NUMBER 3039002
#define SQLITE_SOURCE_ID "2022-07-21 15:24:47 698edb77537b67c41adc68f9b892db56bcf9a55e00371a61420f3ddd668e6603"
#define SQLITE_VERSION "3.39.3"
#define SQLITE_VERSION_NUMBER 3039003
#define SQLITE_SOURCE_ID "2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8"
/*
** CAPI3REF: Run-Time Library Version Numbers

View File

@ -9,7 +9,7 @@ export SQLITE3_LIB_DIR="$SCRIPT_DIR/sqlite3"
export SQLITE3_INCLUDE_DIR="$SQLITE3_LIB_DIR"
# Download and extract amalgamation
SQLITE=sqlite-amalgamation-3390200
SQLITE=sqlite-amalgamation-3390300
curl -O https://sqlite.org/2022/$SQLITE.zip
unzip -p "$SQLITE.zip" "$SQLITE/sqlite3.c" > "$SQLITE3_LIB_DIR/sqlite3.c"
unzip -p "$SQLITE.zip" "$SQLITE/sqlite3.h" > "$SQLITE3_LIB_DIR/sqlite3.h"