| | @@ -231,11 +231,11 @@ |
| 231 | 231 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 232 | 232 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 233 | 233 | */ |
| 234 | 234 | #define SQLITE_VERSION "3.8.8" |
| 235 | 235 | #define SQLITE_VERSION_NUMBER 3008008 |
| 236 | | -#define SQLITE_SOURCE_ID "2015-01-03 18:59:17 23d4c07eb81db5a5c6beb56b5820f0b6501f1fb6" |
| 236 | +#define SQLITE_SOURCE_ID "2015-01-10 18:22:06 46f3aba2692d74c29ab5c1f24a6daac600fd6af8" |
| 237 | 237 | |
| 238 | 238 | /* |
| 239 | 239 | ** CAPI3REF: Run-Time Library Version Numbers |
| 240 | 240 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 241 | 241 | ** |
| | @@ -7613,10 +7613,14 @@ |
| 7613 | 7613 | ** |
| 7614 | 7614 | ** The following constants can be used for the T parameter to the |
| 7615 | 7615 | ** [sqlite3_stmt_scanstatus(S,X,T,V)] interface. Each constant designates a |
| 7616 | 7616 | ** different metric for sqlite3_stmt_scanstatus() to return. |
| 7617 | 7617 | ** |
| 7618 | +** When the value returned to V is a string, space to hold that string is |
| 7619 | +** managed by the prepared statement S and will be automatically freed when |
| 7620 | +** S is finalized. |
| 7621 | +** |
| 7618 | 7622 | ** <dl> |
| 7619 | 7623 | ** [[SQLITE_SCANSTAT_NLOOP]] <dt>SQLITE_SCANSTAT_NLOOP</dt> |
| 7620 | 7624 | ** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be |
| 7621 | 7625 | ** set to the total number of times that the X-th loop has run.</dd> |
| 7622 | 7626 | ** |
| | @@ -7658,11 +7662,18 @@ |
| 7658 | 7662 | #define SQLITE_SCANSTAT_SELECTID 5 |
| 7659 | 7663 | |
| 7660 | 7664 | /* |
| 7661 | 7665 | ** CAPI3REF: Prepared Statement Scan Status |
| 7662 | 7666 | ** |
| 7663 | | -** Return status data for a single loop within query pStmt. |
| 7667 | +** This interface returns information about the predicted and measured |
| 7668 | +** performance for pStmt. Advanced applications can use this |
| 7669 | +** interface to compare the predicted and the measured performance and |
| 7670 | +** issue warnings and/or rerun [ANALYZE] if discrepancies are found. |
| 7671 | +** |
| 7672 | +** Since this interface is expected to be rarely used, it is only |
| 7673 | +** available if SQLite is compiled using the [SQLITE_ENABLE_STMT_SCANSTATUS] |
| 7674 | +** compile-time option. |
| 7664 | 7675 | ** |
| 7665 | 7676 | ** The "iScanStatusOp" parameter determines which status information to return. |
| 7666 | 7677 | ** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior |
| 7667 | 7678 | ** of this interface is undefined. |
| 7668 | 7679 | ** ^The requested measurement is written into a variable pointed to by |
| | @@ -7676,13 +7687,10 @@ |
| 7676 | 7687 | ** ^Statistics might not be available for all loops in all statements. ^In cases |
| 7677 | 7688 | ** where there exist loops with no available statistics, this function behaves |
| 7678 | 7689 | ** as if the loop did not exist - it returns non-zero and leave the variable |
| 7679 | 7690 | ** that pOut points to unchanged. |
| 7680 | 7691 | ** |
| 7681 | | -** This API is only available if the library is built with pre-processor |
| 7682 | | -** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined. |
| 7683 | | -** |
| 7684 | 7692 | ** See also: [sqlite3_stmt_scanstatus_reset()] |
| 7685 | 7693 | */ |
| 7686 | 7694 | SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_scanstatus( |
| 7687 | 7695 | sqlite3_stmt *pStmt, /* Prepared statement for which info desired */ |
| 7688 | 7696 | int idx, /* Index of loop to report on */ |
| | @@ -12054,11 +12062,11 @@ |
| 12054 | 12062 | #define SF_UsesEphemeral 0x0008 /* Uses the OpenEphemeral opcode */ |
| 12055 | 12063 | #define SF_Expanded 0x0010 /* sqlite3SelectExpand() called on this */ |
| 12056 | 12064 | #define SF_HasTypeInfo 0x0020 /* FROM subqueries have Table metadata */ |
| 12057 | 12065 | #define SF_Compound 0x0040 /* Part of a compound query */ |
| 12058 | 12066 | #define SF_Values 0x0080 /* Synthesized from VALUES clause */ |
| 12059 | | - /* 0x0100 NOT USED */ |
| 12067 | +#define SF_AllValues 0x0100 /* All terms of compound are VALUES */ |
| 12060 | 12068 | #define SF_NestedFrom 0x0200 /* Part of a parenthesized FROM clause */ |
| 12061 | 12069 | #define SF_MaybeConvert 0x0400 /* Need convertCompoundSelectToSubquery() */ |
| 12062 | 12070 | #define SF_Recursive 0x0800 /* The recursive part of a recursive CTE */ |
| 12063 | 12071 | #define SF_MinMaxAgg 0x1000 /* Aggregate containing min() or max() */ |
| 12064 | 12072 | |
| | @@ -12682,11 +12690,11 @@ |
| 12682 | 12690 | ** FTS4 is really an extension for FTS3. It is enabled using the |
| 12683 | 12691 | ** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also call |
| 12684 | 12692 | ** the SQLITE_ENABLE_FTS4 macro to serve as an alias for SQLITE_ENABLE_FTS3. |
| 12685 | 12693 | */ |
| 12686 | 12694 | #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3) |
| 12687 | | -# define SQLITE_ENABLE_FTS3 |
| 12695 | +# define SQLITE_ENABLE_FTS3 1 |
| 12688 | 12696 | #endif |
| 12689 | 12697 | |
| 12690 | 12698 | /* |
| 12691 | 12699 | ** The ctype.h header is needed for non-ASCII systems. It is also |
| 12692 | 12700 | ** needed by FTS3 when FTS3 is included in the amalgamation. |
| | @@ -13824,355 +13832,355 @@ |
| 13824 | 13832 | /* These macros are provided to "stringify" the value of the define |
| 13825 | 13833 | ** for those options in which the value is meaningful. */ |
| 13826 | 13834 | #define CTIMEOPT_VAL_(opt) #opt |
| 13827 | 13835 | #define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt) |
| 13828 | 13836 | |
| 13829 | | -#ifdef SQLITE_32BIT_ROWID |
| 13837 | +#if SQLITE_32BIT_ROWID |
| 13830 | 13838 | "32BIT_ROWID", |
| 13831 | 13839 | #endif |
| 13832 | | -#ifdef SQLITE_4_BYTE_ALIGNED_MALLOC |
| 13840 | +#if SQLITE_4_BYTE_ALIGNED_MALLOC |
| 13833 | 13841 | "4_BYTE_ALIGNED_MALLOC", |
| 13834 | 13842 | #endif |
| 13835 | | -#ifdef SQLITE_CASE_SENSITIVE_LIKE |
| 13843 | +#if SQLITE_CASE_SENSITIVE_LIKE |
| 13836 | 13844 | "CASE_SENSITIVE_LIKE", |
| 13837 | 13845 | #endif |
| 13838 | | -#ifdef SQLITE_CHECK_PAGES |
| 13846 | +#if SQLITE_CHECK_PAGES |
| 13839 | 13847 | "CHECK_PAGES", |
| 13840 | 13848 | #endif |
| 13841 | | -#ifdef SQLITE_COVERAGE_TEST |
| 13849 | +#if SQLITE_COVERAGE_TEST |
| 13842 | 13850 | "COVERAGE_TEST", |
| 13843 | 13851 | #endif |
| 13844 | | -#ifdef SQLITE_DEBUG |
| 13852 | +#if SQLITE_DEBUG |
| 13845 | 13853 | "DEBUG", |
| 13846 | 13854 | #endif |
| 13847 | | -#ifdef SQLITE_DEFAULT_LOCKING_MODE |
| 13855 | +#if SQLITE_DEFAULT_LOCKING_MODE |
| 13848 | 13856 | "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE), |
| 13849 | 13857 | #endif |
| 13850 | 13858 | #if defined(SQLITE_DEFAULT_MMAP_SIZE) && !defined(SQLITE_DEFAULT_MMAP_SIZE_xc) |
| 13851 | 13859 | "DEFAULT_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_DEFAULT_MMAP_SIZE), |
| 13852 | 13860 | #endif |
| 13853 | | -#ifdef SQLITE_DISABLE_DIRSYNC |
| 13861 | +#if SQLITE_DISABLE_DIRSYNC |
| 13854 | 13862 | "DISABLE_DIRSYNC", |
| 13855 | 13863 | #endif |
| 13856 | | -#ifdef SQLITE_DISABLE_LFS |
| 13864 | +#if SQLITE_DISABLE_LFS |
| 13857 | 13865 | "DISABLE_LFS", |
| 13858 | 13866 | #endif |
| 13859 | | -#ifdef SQLITE_ENABLE_API_ARMOR |
| 13867 | +#if SQLITE_ENABLE_API_ARMOR |
| 13860 | 13868 | "ENABLE_API_ARMOR", |
| 13861 | 13869 | #endif |
| 13862 | | -#ifdef SQLITE_ENABLE_ATOMIC_WRITE |
| 13870 | +#if SQLITE_ENABLE_ATOMIC_WRITE |
| 13863 | 13871 | "ENABLE_ATOMIC_WRITE", |
| 13864 | 13872 | #endif |
| 13865 | | -#ifdef SQLITE_ENABLE_CEROD |
| 13873 | +#if SQLITE_ENABLE_CEROD |
| 13866 | 13874 | "ENABLE_CEROD", |
| 13867 | 13875 | #endif |
| 13868 | | -#ifdef SQLITE_ENABLE_COLUMN_METADATA |
| 13876 | +#if SQLITE_ENABLE_COLUMN_METADATA |
| 13869 | 13877 | "ENABLE_COLUMN_METADATA", |
| 13870 | 13878 | #endif |
| 13871 | | -#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT |
| 13879 | +#if SQLITE_ENABLE_EXPENSIVE_ASSERT |
| 13872 | 13880 | "ENABLE_EXPENSIVE_ASSERT", |
| 13873 | 13881 | #endif |
| 13874 | | -#ifdef SQLITE_ENABLE_FTS1 |
| 13882 | +#if SQLITE_ENABLE_FTS1 |
| 13875 | 13883 | "ENABLE_FTS1", |
| 13876 | 13884 | #endif |
| 13877 | | -#ifdef SQLITE_ENABLE_FTS2 |
| 13885 | +#if SQLITE_ENABLE_FTS2 |
| 13878 | 13886 | "ENABLE_FTS2", |
| 13879 | 13887 | #endif |
| 13880 | | -#ifdef SQLITE_ENABLE_FTS3 |
| 13888 | +#if SQLITE_ENABLE_FTS3 |
| 13881 | 13889 | "ENABLE_FTS3", |
| 13882 | 13890 | #endif |
| 13883 | | -#ifdef SQLITE_ENABLE_FTS3_PARENTHESIS |
| 13891 | +#if SQLITE_ENABLE_FTS3_PARENTHESIS |
| 13884 | 13892 | "ENABLE_FTS3_PARENTHESIS", |
| 13885 | 13893 | #endif |
| 13886 | | -#ifdef SQLITE_ENABLE_FTS4 |
| 13894 | +#if SQLITE_ENABLE_FTS4 |
| 13887 | 13895 | "ENABLE_FTS4", |
| 13888 | 13896 | #endif |
| 13889 | | -#ifdef SQLITE_ENABLE_ICU |
| 13897 | +#if SQLITE_ENABLE_ICU |
| 13890 | 13898 | "ENABLE_ICU", |
| 13891 | 13899 | #endif |
| 13892 | | -#ifdef SQLITE_ENABLE_IOTRACE |
| 13900 | +#if SQLITE_ENABLE_IOTRACE |
| 13893 | 13901 | "ENABLE_IOTRACE", |
| 13894 | 13902 | #endif |
| 13895 | | -#ifdef SQLITE_ENABLE_LOAD_EXTENSION |
| 13903 | +#if SQLITE_ENABLE_LOAD_EXTENSION |
| 13896 | 13904 | "ENABLE_LOAD_EXTENSION", |
| 13897 | 13905 | #endif |
| 13898 | | -#ifdef SQLITE_ENABLE_LOCKING_STYLE |
| 13906 | +#if SQLITE_ENABLE_LOCKING_STYLE |
| 13899 | 13907 | "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE), |
| 13900 | 13908 | #endif |
| 13901 | | -#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT |
| 13909 | +#if SQLITE_ENABLE_MEMORY_MANAGEMENT |
| 13902 | 13910 | "ENABLE_MEMORY_MANAGEMENT", |
| 13903 | 13911 | #endif |
| 13904 | | -#ifdef SQLITE_ENABLE_MEMSYS3 |
| 13912 | +#if SQLITE_ENABLE_MEMSYS3 |
| 13905 | 13913 | "ENABLE_MEMSYS3", |
| 13906 | 13914 | #endif |
| 13907 | | -#ifdef SQLITE_ENABLE_MEMSYS5 |
| 13915 | +#if SQLITE_ENABLE_MEMSYS5 |
| 13908 | 13916 | "ENABLE_MEMSYS5", |
| 13909 | 13917 | #endif |
| 13910 | | -#ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK |
| 13918 | +#if SQLITE_ENABLE_OVERSIZE_CELL_CHECK |
| 13911 | 13919 | "ENABLE_OVERSIZE_CELL_CHECK", |
| 13912 | 13920 | #endif |
| 13913 | | -#ifdef SQLITE_ENABLE_RTREE |
| 13921 | +#if SQLITE_ENABLE_RTREE |
| 13914 | 13922 | "ENABLE_RTREE", |
| 13915 | 13923 | #endif |
| 13916 | 13924 | #if defined(SQLITE_ENABLE_STAT4) |
| 13917 | 13925 | "ENABLE_STAT4", |
| 13918 | 13926 | #elif defined(SQLITE_ENABLE_STAT3) |
| 13919 | 13927 | "ENABLE_STAT3", |
| 13920 | 13928 | #endif |
| 13921 | | -#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY |
| 13929 | +#if SQLITE_ENABLE_UNLOCK_NOTIFY |
| 13922 | 13930 | "ENABLE_UNLOCK_NOTIFY", |
| 13923 | 13931 | #endif |
| 13924 | | -#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT |
| 13932 | +#if SQLITE_ENABLE_UPDATE_DELETE_LIMIT |
| 13925 | 13933 | "ENABLE_UPDATE_DELETE_LIMIT", |
| 13926 | 13934 | #endif |
| 13927 | | -#ifdef SQLITE_HAS_CODEC |
| 13935 | +#if SQLITE_HAS_CODEC |
| 13928 | 13936 | "HAS_CODEC", |
| 13929 | 13937 | #endif |
| 13930 | | -#ifdef SQLITE_HAVE_ISNAN |
| 13938 | +#if HAVE_ISNAN || SQLITE_HAVE_ISNAN |
| 13931 | 13939 | "HAVE_ISNAN", |
| 13932 | 13940 | #endif |
| 13933 | | -#ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX |
| 13941 | +#if SQLITE_HOMEGROWN_RECURSIVE_MUTEX |
| 13934 | 13942 | "HOMEGROWN_RECURSIVE_MUTEX", |
| 13935 | 13943 | #endif |
| 13936 | | -#ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS |
| 13944 | +#if SQLITE_IGNORE_AFP_LOCK_ERRORS |
| 13937 | 13945 | "IGNORE_AFP_LOCK_ERRORS", |
| 13938 | 13946 | #endif |
| 13939 | | -#ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS |
| 13947 | +#if SQLITE_IGNORE_FLOCK_LOCK_ERRORS |
| 13940 | 13948 | "IGNORE_FLOCK_LOCK_ERRORS", |
| 13941 | 13949 | #endif |
| 13942 | 13950 | #ifdef SQLITE_INT64_TYPE |
| 13943 | 13951 | "INT64_TYPE", |
| 13944 | 13952 | #endif |
| 13945 | | -#ifdef SQLITE_LOCK_TRACE |
| 13953 | +#if SQLITE_LOCK_TRACE |
| 13946 | 13954 | "LOCK_TRACE", |
| 13947 | 13955 | #endif |
| 13948 | 13956 | #if defined(SQLITE_MAX_MMAP_SIZE) && !defined(SQLITE_MAX_MMAP_SIZE_xc) |
| 13949 | 13957 | "MAX_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_MAX_MMAP_SIZE), |
| 13950 | 13958 | #endif |
| 13951 | 13959 | #ifdef SQLITE_MAX_SCHEMA_RETRY |
| 13952 | 13960 | "MAX_SCHEMA_RETRY=" CTIMEOPT_VAL(SQLITE_MAX_SCHEMA_RETRY), |
| 13953 | 13961 | #endif |
| 13954 | | -#ifdef SQLITE_MEMDEBUG |
| 13962 | +#if SQLITE_MEMDEBUG |
| 13955 | 13963 | "MEMDEBUG", |
| 13956 | 13964 | #endif |
| 13957 | | -#ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT |
| 13965 | +#if SQLITE_MIXED_ENDIAN_64BIT_FLOAT |
| 13958 | 13966 | "MIXED_ENDIAN_64BIT_FLOAT", |
| 13959 | 13967 | #endif |
| 13960 | | -#ifdef SQLITE_NO_SYNC |
| 13968 | +#if SQLITE_NO_SYNC |
| 13961 | 13969 | "NO_SYNC", |
| 13962 | 13970 | #endif |
| 13963 | | -#ifdef SQLITE_OMIT_ALTERTABLE |
| 13971 | +#if SQLITE_OMIT_ALTERTABLE |
| 13964 | 13972 | "OMIT_ALTERTABLE", |
| 13965 | 13973 | #endif |
| 13966 | | -#ifdef SQLITE_OMIT_ANALYZE |
| 13974 | +#if SQLITE_OMIT_ANALYZE |
| 13967 | 13975 | "OMIT_ANALYZE", |
| 13968 | 13976 | #endif |
| 13969 | | -#ifdef SQLITE_OMIT_ATTACH |
| 13977 | +#if SQLITE_OMIT_ATTACH |
| 13970 | 13978 | "OMIT_ATTACH", |
| 13971 | 13979 | #endif |
| 13972 | | -#ifdef SQLITE_OMIT_AUTHORIZATION |
| 13980 | +#if SQLITE_OMIT_AUTHORIZATION |
| 13973 | 13981 | "OMIT_AUTHORIZATION", |
| 13974 | 13982 | #endif |
| 13975 | | -#ifdef SQLITE_OMIT_AUTOINCREMENT |
| 13983 | +#if SQLITE_OMIT_AUTOINCREMENT |
| 13976 | 13984 | "OMIT_AUTOINCREMENT", |
| 13977 | 13985 | #endif |
| 13978 | | -#ifdef SQLITE_OMIT_AUTOINIT |
| 13986 | +#if SQLITE_OMIT_AUTOINIT |
| 13979 | 13987 | "OMIT_AUTOINIT", |
| 13980 | 13988 | #endif |
| 13981 | | -#ifdef SQLITE_OMIT_AUTOMATIC_INDEX |
| 13989 | +#if SQLITE_OMIT_AUTOMATIC_INDEX |
| 13982 | 13990 | "OMIT_AUTOMATIC_INDEX", |
| 13983 | 13991 | #endif |
| 13984 | | -#ifdef SQLITE_OMIT_AUTORESET |
| 13992 | +#if SQLITE_OMIT_AUTORESET |
| 13985 | 13993 | "OMIT_AUTORESET", |
| 13986 | 13994 | #endif |
| 13987 | | -#ifdef SQLITE_OMIT_AUTOVACUUM |
| 13995 | +#if SQLITE_OMIT_AUTOVACUUM |
| 13988 | 13996 | "OMIT_AUTOVACUUM", |
| 13989 | 13997 | #endif |
| 13990 | | -#ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION |
| 13998 | +#if SQLITE_OMIT_BETWEEN_OPTIMIZATION |
| 13991 | 13999 | "OMIT_BETWEEN_OPTIMIZATION", |
| 13992 | 14000 | #endif |
| 13993 | | -#ifdef SQLITE_OMIT_BLOB_LITERAL |
| 14001 | +#if SQLITE_OMIT_BLOB_LITERAL |
| 13994 | 14002 | "OMIT_BLOB_LITERAL", |
| 13995 | 14003 | #endif |
| 13996 | | -#ifdef SQLITE_OMIT_BTREECOUNT |
| 14004 | +#if SQLITE_OMIT_BTREECOUNT |
| 13997 | 14005 | "OMIT_BTREECOUNT", |
| 13998 | 14006 | #endif |
| 13999 | | -#ifdef SQLITE_OMIT_BUILTIN_TEST |
| 14007 | +#if SQLITE_OMIT_BUILTIN_TEST |
| 14000 | 14008 | "OMIT_BUILTIN_TEST", |
| 14001 | 14009 | #endif |
| 14002 | | -#ifdef SQLITE_OMIT_CAST |
| 14010 | +#if SQLITE_OMIT_CAST |
| 14003 | 14011 | "OMIT_CAST", |
| 14004 | 14012 | #endif |
| 14005 | | -#ifdef SQLITE_OMIT_CHECK |
| 14013 | +#if SQLITE_OMIT_CHECK |
| 14006 | 14014 | "OMIT_CHECK", |
| 14007 | 14015 | #endif |
| 14008 | | -#ifdef SQLITE_OMIT_COMPLETE |
| 14016 | +#if SQLITE_OMIT_COMPLETE |
| 14009 | 14017 | "OMIT_COMPLETE", |
| 14010 | 14018 | #endif |
| 14011 | | -#ifdef SQLITE_OMIT_COMPOUND_SELECT |
| 14019 | +#if SQLITE_OMIT_COMPOUND_SELECT |
| 14012 | 14020 | "OMIT_COMPOUND_SELECT", |
| 14013 | 14021 | #endif |
| 14014 | | -#ifdef SQLITE_OMIT_CTE |
| 14022 | +#if SQLITE_OMIT_CTE |
| 14015 | 14023 | "OMIT_CTE", |
| 14016 | 14024 | #endif |
| 14017 | | -#ifdef SQLITE_OMIT_DATETIME_FUNCS |
| 14025 | +#if SQLITE_OMIT_DATETIME_FUNCS |
| 14018 | 14026 | "OMIT_DATETIME_FUNCS", |
| 14019 | 14027 | #endif |
| 14020 | | -#ifdef SQLITE_OMIT_DECLTYPE |
| 14028 | +#if SQLITE_OMIT_DECLTYPE |
| 14021 | 14029 | "OMIT_DECLTYPE", |
| 14022 | 14030 | #endif |
| 14023 | | -#ifdef SQLITE_OMIT_DEPRECATED |
| 14031 | +#if SQLITE_OMIT_DEPRECATED |
| 14024 | 14032 | "OMIT_DEPRECATED", |
| 14025 | 14033 | #endif |
| 14026 | | -#ifdef SQLITE_OMIT_DISKIO |
| 14034 | +#if SQLITE_OMIT_DISKIO |
| 14027 | 14035 | "OMIT_DISKIO", |
| 14028 | 14036 | #endif |
| 14029 | | -#ifdef SQLITE_OMIT_EXPLAIN |
| 14037 | +#if SQLITE_OMIT_EXPLAIN |
| 14030 | 14038 | "OMIT_EXPLAIN", |
| 14031 | 14039 | #endif |
| 14032 | | -#ifdef SQLITE_OMIT_FLAG_PRAGMAS |
| 14040 | +#if SQLITE_OMIT_FLAG_PRAGMAS |
| 14033 | 14041 | "OMIT_FLAG_PRAGMAS", |
| 14034 | 14042 | #endif |
| 14035 | | -#ifdef SQLITE_OMIT_FLOATING_POINT |
| 14043 | +#if SQLITE_OMIT_FLOATING_POINT |
| 14036 | 14044 | "OMIT_FLOATING_POINT", |
| 14037 | 14045 | #endif |
| 14038 | | -#ifdef SQLITE_OMIT_FOREIGN_KEY |
| 14046 | +#if SQLITE_OMIT_FOREIGN_KEY |
| 14039 | 14047 | "OMIT_FOREIGN_KEY", |
| 14040 | 14048 | #endif |
| 14041 | | -#ifdef SQLITE_OMIT_GET_TABLE |
| 14049 | +#if SQLITE_OMIT_GET_TABLE |
| 14042 | 14050 | "OMIT_GET_TABLE", |
| 14043 | 14051 | #endif |
| 14044 | | -#ifdef SQLITE_OMIT_INCRBLOB |
| 14052 | +#if SQLITE_OMIT_INCRBLOB |
| 14045 | 14053 | "OMIT_INCRBLOB", |
| 14046 | 14054 | #endif |
| 14047 | | -#ifdef SQLITE_OMIT_INTEGRITY_CHECK |
| 14055 | +#if SQLITE_OMIT_INTEGRITY_CHECK |
| 14048 | 14056 | "OMIT_INTEGRITY_CHECK", |
| 14049 | 14057 | #endif |
| 14050 | | -#ifdef SQLITE_OMIT_LIKE_OPTIMIZATION |
| 14058 | +#if SQLITE_OMIT_LIKE_OPTIMIZATION |
| 14051 | 14059 | "OMIT_LIKE_OPTIMIZATION", |
| 14052 | 14060 | #endif |
| 14053 | | -#ifdef SQLITE_OMIT_LOAD_EXTENSION |
| 14061 | +#if SQLITE_OMIT_LOAD_EXTENSION |
| 14054 | 14062 | "OMIT_LOAD_EXTENSION", |
| 14055 | 14063 | #endif |
| 14056 | | -#ifdef SQLITE_OMIT_LOCALTIME |
| 14064 | +#if SQLITE_OMIT_LOCALTIME |
| 14057 | 14065 | "OMIT_LOCALTIME", |
| 14058 | 14066 | #endif |
| 14059 | | -#ifdef SQLITE_OMIT_LOOKASIDE |
| 14067 | +#if SQLITE_OMIT_LOOKASIDE |
| 14060 | 14068 | "OMIT_LOOKASIDE", |
| 14061 | 14069 | #endif |
| 14062 | | -#ifdef SQLITE_OMIT_MEMORYDB |
| 14070 | +#if SQLITE_OMIT_MEMORYDB |
| 14063 | 14071 | "OMIT_MEMORYDB", |
| 14064 | 14072 | #endif |
| 14065 | | -#ifdef SQLITE_OMIT_OR_OPTIMIZATION |
| 14073 | +#if SQLITE_OMIT_OR_OPTIMIZATION |
| 14066 | 14074 | "OMIT_OR_OPTIMIZATION", |
| 14067 | 14075 | #endif |
| 14068 | | -#ifdef SQLITE_OMIT_PAGER_PRAGMAS |
| 14076 | +#if SQLITE_OMIT_PAGER_PRAGMAS |
| 14069 | 14077 | "OMIT_PAGER_PRAGMAS", |
| 14070 | 14078 | #endif |
| 14071 | | -#ifdef SQLITE_OMIT_PRAGMA |
| 14079 | +#if SQLITE_OMIT_PRAGMA |
| 14072 | 14080 | "OMIT_PRAGMA", |
| 14073 | 14081 | #endif |
| 14074 | | -#ifdef SQLITE_OMIT_PROGRESS_CALLBACK |
| 14082 | +#if SQLITE_OMIT_PROGRESS_CALLBACK |
| 14075 | 14083 | "OMIT_PROGRESS_CALLBACK", |
| 14076 | 14084 | #endif |
| 14077 | | -#ifdef SQLITE_OMIT_QUICKBALANCE |
| 14085 | +#if SQLITE_OMIT_QUICKBALANCE |
| 14078 | 14086 | "OMIT_QUICKBALANCE", |
| 14079 | 14087 | #endif |
| 14080 | | -#ifdef SQLITE_OMIT_REINDEX |
| 14088 | +#if SQLITE_OMIT_REINDEX |
| 14081 | 14089 | "OMIT_REINDEX", |
| 14082 | 14090 | #endif |
| 14083 | | -#ifdef SQLITE_OMIT_SCHEMA_PRAGMAS |
| 14091 | +#if SQLITE_OMIT_SCHEMA_PRAGMAS |
| 14084 | 14092 | "OMIT_SCHEMA_PRAGMAS", |
| 14085 | 14093 | #endif |
| 14086 | | -#ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS |
| 14094 | +#if SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS |
| 14087 | 14095 | "OMIT_SCHEMA_VERSION_PRAGMAS", |
| 14088 | 14096 | #endif |
| 14089 | | -#ifdef SQLITE_OMIT_SHARED_CACHE |
| 14097 | +#if SQLITE_OMIT_SHARED_CACHE |
| 14090 | 14098 | "OMIT_SHARED_CACHE", |
| 14091 | 14099 | #endif |
| 14092 | | -#ifdef SQLITE_OMIT_SUBQUERY |
| 14100 | +#if SQLITE_OMIT_SUBQUERY |
| 14093 | 14101 | "OMIT_SUBQUERY", |
| 14094 | 14102 | #endif |
| 14095 | | -#ifdef SQLITE_OMIT_TCL_VARIABLE |
| 14103 | +#if SQLITE_OMIT_TCL_VARIABLE |
| 14096 | 14104 | "OMIT_TCL_VARIABLE", |
| 14097 | 14105 | #endif |
| 14098 | | -#ifdef SQLITE_OMIT_TEMPDB |
| 14106 | +#if SQLITE_OMIT_TEMPDB |
| 14099 | 14107 | "OMIT_TEMPDB", |
| 14100 | 14108 | #endif |
| 14101 | | -#ifdef SQLITE_OMIT_TRACE |
| 14109 | +#if SQLITE_OMIT_TRACE |
| 14102 | 14110 | "OMIT_TRACE", |
| 14103 | 14111 | #endif |
| 14104 | | -#ifdef SQLITE_OMIT_TRIGGER |
| 14112 | +#if SQLITE_OMIT_TRIGGER |
| 14105 | 14113 | "OMIT_TRIGGER", |
| 14106 | 14114 | #endif |
| 14107 | | -#ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION |
| 14115 | +#if SQLITE_OMIT_TRUNCATE_OPTIMIZATION |
| 14108 | 14116 | "OMIT_TRUNCATE_OPTIMIZATION", |
| 14109 | 14117 | #endif |
| 14110 | | -#ifdef SQLITE_OMIT_UTF16 |
| 14118 | +#if SQLITE_OMIT_UTF16 |
| 14111 | 14119 | "OMIT_UTF16", |
| 14112 | 14120 | #endif |
| 14113 | | -#ifdef SQLITE_OMIT_VACUUM |
| 14121 | +#if SQLITE_OMIT_VACUUM |
| 14114 | 14122 | "OMIT_VACUUM", |
| 14115 | 14123 | #endif |
| 14116 | | -#ifdef SQLITE_OMIT_VIEW |
| 14124 | +#if SQLITE_OMIT_VIEW |
| 14117 | 14125 | "OMIT_VIEW", |
| 14118 | 14126 | #endif |
| 14119 | | -#ifdef SQLITE_OMIT_VIRTUALTABLE |
| 14127 | +#if SQLITE_OMIT_VIRTUALTABLE |
| 14120 | 14128 | "OMIT_VIRTUALTABLE", |
| 14121 | 14129 | #endif |
| 14122 | | -#ifdef SQLITE_OMIT_WAL |
| 14130 | +#if SQLITE_OMIT_WAL |
| 14123 | 14131 | "OMIT_WAL", |
| 14124 | 14132 | #endif |
| 14125 | | -#ifdef SQLITE_OMIT_WSD |
| 14133 | +#if SQLITE_OMIT_WSD |
| 14126 | 14134 | "OMIT_WSD", |
| 14127 | 14135 | #endif |
| 14128 | | -#ifdef SQLITE_OMIT_XFER_OPT |
| 14136 | +#if SQLITE_OMIT_XFER_OPT |
| 14129 | 14137 | "OMIT_XFER_OPT", |
| 14130 | 14138 | #endif |
| 14131 | | -#ifdef SQLITE_PERFORMANCE_TRACE |
| 14139 | +#if SQLITE_PERFORMANCE_TRACE |
| 14132 | 14140 | "PERFORMANCE_TRACE", |
| 14133 | 14141 | #endif |
| 14134 | | -#ifdef SQLITE_PROXY_DEBUG |
| 14142 | +#if SQLITE_PROXY_DEBUG |
| 14135 | 14143 | "PROXY_DEBUG", |
| 14136 | 14144 | #endif |
| 14137 | | -#ifdef SQLITE_RTREE_INT_ONLY |
| 14145 | +#if SQLITE_RTREE_INT_ONLY |
| 14138 | 14146 | "RTREE_INT_ONLY", |
| 14139 | 14147 | #endif |
| 14140 | | -#ifdef SQLITE_SECURE_DELETE |
| 14148 | +#if SQLITE_SECURE_DELETE |
| 14141 | 14149 | "SECURE_DELETE", |
| 14142 | 14150 | #endif |
| 14143 | | -#ifdef SQLITE_SMALL_STACK |
| 14151 | +#if SQLITE_SMALL_STACK |
| 14144 | 14152 | "SMALL_STACK", |
| 14145 | 14153 | #endif |
| 14146 | | -#ifdef SQLITE_SOUNDEX |
| 14154 | +#if SQLITE_SOUNDEX |
| 14147 | 14155 | "SOUNDEX", |
| 14148 | 14156 | #endif |
| 14149 | | -#ifdef SQLITE_SYSTEM_MALLOC |
| 14157 | +#if SQLITE_SYSTEM_MALLOC |
| 14150 | 14158 | "SYSTEM_MALLOC", |
| 14151 | 14159 | #endif |
| 14152 | | -#ifdef SQLITE_TCL |
| 14160 | +#if SQLITE_TCL |
| 14153 | 14161 | "TCL", |
| 14154 | 14162 | #endif |
| 14155 | 14163 | #if defined(SQLITE_TEMP_STORE) && !defined(SQLITE_TEMP_STORE_xc) |
| 14156 | 14164 | "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE), |
| 14157 | 14165 | #endif |
| 14158 | | -#ifdef SQLITE_TEST |
| 14166 | +#if SQLITE_TEST |
| 14159 | 14167 | "TEST", |
| 14160 | 14168 | #endif |
| 14161 | 14169 | #if defined(SQLITE_THREADSAFE) |
| 14162 | 14170 | "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE), |
| 14163 | 14171 | #endif |
| 14164 | | -#ifdef SQLITE_USE_ALLOCA |
| 14172 | +#if SQLITE_USE_ALLOCA |
| 14165 | 14173 | "USE_ALLOCA", |
| 14166 | 14174 | #endif |
| 14167 | | -#ifdef SQLITE_USER_AUTHENTICATION |
| 14175 | +#if SQLITE_USER_AUTHENTICATION |
| 14168 | 14176 | "USER_AUTHENTICATION", |
| 14169 | 14177 | #endif |
| 14170 | | -#ifdef SQLITE_WIN32_MALLOC |
| 14178 | +#if SQLITE_WIN32_MALLOC |
| 14171 | 14179 | "WIN32_MALLOC", |
| 14172 | 14180 | #endif |
| 14173 | | -#ifdef SQLITE_ZERO_MALLOC |
| 14181 | +#if SQLITE_ZERO_MALLOC |
| 14174 | 14182 | "ZERO_MALLOC" |
| 14175 | 14183 | #endif |
| 14176 | 14184 | }; |
| 14177 | 14185 | |
| 14178 | 14186 | /* |
| | @@ -14183,11 +14191,11 @@ |
| 14183 | 14191 | ** is not required for a match. |
| 14184 | 14192 | */ |
| 14185 | 14193 | SQLITE_API int sqlite3_compileoption_used(const char *zOptName){ |
| 14186 | 14194 | int i, n; |
| 14187 | 14195 | |
| 14188 | | -#ifdef SQLITE_ENABLE_API_ARMOR |
| 14196 | +#if SQLITE_ENABLE_API_ARMOR |
| 14189 | 14197 | if( zOptName==0 ){ |
| 14190 | 14198 | (void)SQLITE_MISUSE_BKPT; |
| 14191 | 14199 | return 0; |
| 14192 | 14200 | } |
| 14193 | 14201 | #endif |
| | @@ -15411,12 +15419,13 @@ |
| 15411 | 15419 | ** |
| 15412 | 15420 | ** If the user has not indicated to use localtime_r() or localtime_s() |
| 15413 | 15421 | ** already, check for an MSVC build environment that provides |
| 15414 | 15422 | ** localtime_s(). |
| 15415 | 15423 | */ |
| 15416 | | -#if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S) && \ |
| 15417 | | - defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE) |
| 15424 | +#if !HAVE_LOCALTIME_R && !HAVE_LOCALTIME_S \ |
| 15425 | + && defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE) |
| 15426 | +#undef HAVE_LOCALTIME_S |
| 15418 | 15427 | #define HAVE_LOCALTIME_S 1 |
| 15419 | 15428 | #endif |
| 15420 | 15429 | |
| 15421 | 15430 | #ifndef SQLITE_OMIT_LOCALTIME |
| 15422 | 15431 | /* |
| | @@ -15432,12 +15441,11 @@ |
| 15432 | 15441 | ** library function localtime_r() is used to assist in the calculation of |
| 15433 | 15442 | ** local time. |
| 15434 | 15443 | */ |
| 15435 | 15444 | static int osLocaltime(time_t *t, struct tm *pTm){ |
| 15436 | 15445 | int rc; |
| 15437 | | -#if (!defined(HAVE_LOCALTIME_R) || !HAVE_LOCALTIME_R) \ |
| 15438 | | - && (!defined(HAVE_LOCALTIME_S) || !HAVE_LOCALTIME_S) |
| 15446 | +#if !HAVE_LOCALTIME_R && !HAVE_LOCALTIME_S |
| 15439 | 15447 | struct tm *pX; |
| 15440 | 15448 | #if SQLITE_THREADSAFE>0 |
| 15441 | 15449 | sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); |
| 15442 | 15450 | #endif |
| 15443 | 15451 | sqlite3_mutex_enter(mutex); |
| | @@ -15450,11 +15458,11 @@ |
| 15450 | 15458 | rc = pX==0; |
| 15451 | 15459 | #else |
| 15452 | 15460 | #ifndef SQLITE_OMIT_BUILTIN_TEST |
| 15453 | 15461 | if( sqlite3GlobalConfig.bLocaltimeFault ) return 1; |
| 15454 | 15462 | #endif |
| 15455 | | -#if defined(HAVE_LOCALTIME_R) && HAVE_LOCALTIME_R |
| 15463 | +#if HAVE_LOCALTIME_R |
| 15456 | 15464 | rc = localtime_r(t, pTm)==0; |
| 15457 | 15465 | #else |
| 15458 | 15466 | rc = localtime_s(pTm, t); |
| 15459 | 15467 | #endif /* HAVE_LOCALTIME_R */ |
| 15460 | 15468 | #endif /* HAVE_LOCALTIME_R || HAVE_LOCALTIME_S */ |
| | @@ -15894,12 +15902,14 @@ |
| 15894 | 15902 | DateTime x; |
| 15895 | 15903 | u64 n; |
| 15896 | 15904 | size_t i,j; |
| 15897 | 15905 | char *z; |
| 15898 | 15906 | sqlite3 *db; |
| 15899 | | - const char *zFmt = (const char*)sqlite3_value_text(argv[0]); |
| 15907 | + const char *zFmt; |
| 15900 | 15908 | char zBuf[100]; |
| 15909 | + if( argc==0 ) return; |
| 15910 | + zFmt = (const char*)sqlite3_value_text(argv[0]); |
| 15901 | 15911 | if( zFmt==0 || isDate(context, argc-1, argv+1, &x) ) return; |
| 15902 | 15912 | db = sqlite3_context_db_handle(context); |
| 15903 | 15913 | for(i=0, n=1; zFmt[i]; i++, n++){ |
| 15904 | 15914 | if( zFmt[i]=='%' ){ |
| 15905 | 15915 | switch( zFmt[i+1] ){ |
| | @@ -16089,11 +16099,11 @@ |
| 16089 | 16099 | UNUSED_PARAMETER(argv); |
| 16090 | 16100 | |
| 16091 | 16101 | iT = sqlite3StmtCurrentTime(context); |
| 16092 | 16102 | if( iT<=0 ) return; |
| 16093 | 16103 | t = iT/1000 - 10000*(sqlite3_int64)21086676; |
| 16094 | | -#ifdef HAVE_GMTIME_R |
| 16104 | +#if HAVE_GMTIME_R |
| 16095 | 16105 | pTm = gmtime_r(&t, &sNow); |
| 16096 | 16106 | #else |
| 16097 | 16107 | sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); |
| 16098 | 16108 | pTm = gmtime(&t); |
| 16099 | 16109 | if( pTm ) memcpy(&sNow, pTm, sizeof(sNow)); |
| | @@ -16763,13 +16773,13 @@ |
| 16763 | 16773 | |
| 16764 | 16774 | /* |
| 16765 | 16775 | ** The malloc.h header file is needed for malloc_usable_size() function |
| 16766 | 16776 | ** on some systems (e.g. Linux). |
| 16767 | 16777 | */ |
| 16768 | | -#if defined(HAVE_MALLOC_H) && defined(HAVE_MALLOC_USABLE_SIZE) |
| 16769 | | -# define SQLITE_USE_MALLOC_H |
| 16770 | | -# define SQLITE_USE_MALLOC_USABLE_SIZE |
| 16778 | +#if HAVE_MALLOC_H && HAVE_MALLOC_USABLE_SIZE |
| 16779 | +# define SQLITE_USE_MALLOC_H 1 |
| 16780 | +# define SQLITE_USE_MALLOC_USABLE_SIZE 1 |
| 16771 | 16781 | /* |
| 16772 | 16782 | ** The MSVCRT has malloc_usable_size(), but it is called _msize(). The |
| 16773 | 16783 | ** use of _msize() is automatic, but can be disabled by compiling with |
| 16774 | 16784 | ** -DSQLITE_WITHOUT_MSIZE. Using the _msize() function also requires |
| 16775 | 16785 | ** the malloc.h header file. |
| | @@ -21004,21 +21014,10 @@ |
| 21004 | 21014 | ** This file contains code for a set of "printf"-like routines. These |
| 21005 | 21015 | ** routines format strings much like the printf() from the standard C |
| 21006 | 21016 | ** library, though the implementation here has enhancements to support |
| 21007 | 21017 | ** SQLlite. |
| 21008 | 21018 | */ |
| 21009 | | - |
| 21010 | | -/* |
| 21011 | | -** If the strchrnul() library function is available, then set |
| 21012 | | -** HAVE_STRCHRNUL. If that routine is not available, this module |
| 21013 | | -** will supply its own. The built-in version is slower than |
| 21014 | | -** the glibc version so the glibc version is definitely preferred. |
| 21015 | | -*/ |
| 21016 | | -#if !defined(HAVE_STRCHRNUL) |
| 21017 | | -# define HAVE_STRCHRNUL 0 |
| 21018 | | -#endif |
| 21019 | | - |
| 21020 | 21019 | |
| 21021 | 21020 | /* |
| 21022 | 21021 | ** Conversion types fall into various categories as defined by the |
| 21023 | 21022 | ** following enumeration. |
| 21024 | 21023 | */ |
| | @@ -22313,10 +22312,12 @@ |
| 22313 | 22312 | ** single threaded systems. Nothing in SQLite requires multiple threads. |
| 22314 | 22313 | ** This interface exists so that applications that want to take advantage |
| 22315 | 22314 | ** of multiple cores can do so, while also allowing applications to stay |
| 22316 | 22315 | ** single-threaded if desired. |
| 22317 | 22316 | */ |
| 22317 | +#if SQLITE_OS_WIN |
| 22318 | +#endif |
| 22318 | 22319 | |
| 22319 | 22320 | #if SQLITE_MAX_WORKER_THREADS>0 |
| 22320 | 22321 | |
| 22321 | 22322 | /********************************* Unix Pthreads ****************************/ |
| 22322 | 22323 | #if SQLITE_OS_UNIX && defined(SQLITE_MUTEX_PTHREADS) && SQLITE_THREADSAFE>0 |
| | @@ -23099,11 +23100,11 @@ |
| 23099 | 23100 | ** This file contains functions for allocating memory, comparing |
| 23100 | 23101 | ** strings, and stuff like that. |
| 23101 | 23102 | ** |
| 23102 | 23103 | */ |
| 23103 | 23104 | /* #include <stdarg.h> */ |
| 23104 | | -#ifdef SQLITE_HAVE_ISNAN |
| 23105 | +#if HAVE_ISNAN || SQLITE_HAVE_ISNAN |
| 23105 | 23106 | # include <math.h> |
| 23106 | 23107 | #endif |
| 23107 | 23108 | |
| 23108 | 23109 | /* |
| 23109 | 23110 | ** Routine needed to support the testcase() macro. |
| | @@ -23140,11 +23141,11 @@ |
| 23140 | 23141 | ** Use the math library isnan() function if compiled with SQLITE_HAVE_ISNAN. |
| 23141 | 23142 | ** Otherwise, we have our own implementation that works on most systems. |
| 23142 | 23143 | */ |
| 23143 | 23144 | SQLITE_PRIVATE int sqlite3IsNaN(double x){ |
| 23144 | 23145 | int rc; /* The value return */ |
| 23145 | | -#if !defined(SQLITE_HAVE_ISNAN) |
| 23146 | +#if !SQLITE_HAVE_ISNAN && !HAVE_ISNAN |
| 23146 | 23147 | /* |
| 23147 | 23148 | ** Systems that support the isnan() library function should probably |
| 23148 | 23149 | ** make use of it by compiling with -DSQLITE_HAVE_ISNAN. But we have |
| 23149 | 23150 | ** found that many systems do not have a working isnan() function so |
| 23150 | 23151 | ** this implementation is provided as an alternative. |
| | @@ -23170,13 +23171,13 @@ |
| 23170 | 23171 | # error SQLite will not work correctly with the -ffast-math option of GCC. |
| 23171 | 23172 | #endif |
| 23172 | 23173 | volatile double y = x; |
| 23173 | 23174 | volatile double z = y; |
| 23174 | 23175 | rc = (y!=z); |
| 23175 | | -#else /* if defined(SQLITE_HAVE_ISNAN) */ |
| 23176 | +#else /* if HAVE_ISNAN */ |
| 23176 | 23177 | rc = isnan(x); |
| 23177 | | -#endif /* SQLITE_HAVE_ISNAN */ |
| 23178 | +#endif /* HAVE_ISNAN */ |
| 23178 | 23179 | testcase( rc ); |
| 23179 | 23180 | return rc; |
| 23180 | 23181 | } |
| 23181 | 23182 | #endif /* SQLITE_OMIT_FLOATING_POINT */ |
| 23182 | 23183 | |
| | @@ -28493,13 +28494,13 @@ |
| 28493 | 28494 | |
| 28494 | 28495 | /* |
| 28495 | 28496 | ** We do not trust systems to provide a working fdatasync(). Some do. |
| 28496 | 28497 | ** Others do no. To be safe, we will stick with the (slightly slower) |
| 28497 | 28498 | ** fsync(). If you know that your system does support fdatasync() correctly, |
| 28498 | | -** then simply compile with -Dfdatasync=fdatasync |
| 28499 | +** then simply compile with -Dfdatasync=fdatasync or -DHAVE_FDATASYNC |
| 28499 | 28500 | */ |
| 28500 | | -#if !defined(fdatasync) |
| 28501 | +#if !defined(fdatasync) && !HAVE_FDATASYNC |
| 28501 | 28502 | # define fdatasync fsync |
| 28502 | 28503 | #endif |
| 28503 | 28504 | |
| 28504 | 28505 | /* |
| 28505 | 28506 | ** Define HAVE_FULLFSYNC to 0 or 1 depending on whether or not |
| | @@ -28824,22 +28825,23 @@ |
| 28824 | 28825 | ** at offset (nSize-1), to set the size of the file correctly. |
| 28825 | 28826 | ** This is a similar technique to that used by glibc on systems |
| 28826 | 28827 | ** that do not have a real fallocate() call. |
| 28827 | 28828 | */ |
| 28828 | 28829 | int nBlk = buf.st_blksize; /* File-system block size */ |
| 28830 | + int nWrite = 0; /* Number of bytes written by seekAndWrite */ |
| 28829 | 28831 | i64 iWrite; /* Next offset to write to */ |
| 28830 | 28832 | |
| 28831 | 28833 | iWrite = ((buf.st_size + 2*nBlk - 1)/nBlk)*nBlk-1; |
| 28832 | 28834 | assert( iWrite>=buf.st_size ); |
| 28833 | 28835 | assert( (iWrite/nBlk)==((buf.st_size+nBlk-1)/nBlk) ); |
| 28834 | 28836 | assert( ((iWrite+1)%nBlk)==0 ); |
| 28835 | 28837 | for(/*no-op*/; iWrite<nSize; iWrite+=nBlk ){ |
| 28836 | | - int nWrite = seekAndWrite(pFile, iWrite, "", 1); |
| 28838 | + nWrite = seekAndWrite(pFile, iWrite, "", 1); |
| 28837 | 28839 | if( nWrite!=1 ) return SQLITE_IOERR_WRITE; |
| 28838 | 28840 | } |
| 28839 | | - if( nSize%nBlk ){ |
| 28840 | | - int nWrite = seekAndWrite(pFile, nSize-1, "", 1); |
| 28841 | + if( nWrite==0 || (nSize%nBlk) ){ |
| 28842 | + nWrite = seekAndWrite(pFile, nSize-1, "", 1); |
| 28841 | 28843 | if( nWrite!=1 ) return SQLITE_IOERR_WRITE; |
| 28842 | 28844 | } |
| 28843 | 28845 | #endif |
| 28844 | 28846 | } |
| 28845 | 28847 | } |
| | @@ -38849,22 +38851,10 @@ |
| 38849 | 38851 | void *pStress; /* Argument to xStress */ |
| 38850 | 38852 | sqlite3_pcache *pCache; /* Pluggable cache module */ |
| 38851 | 38853 | PgHdr *pPage1; /* Reference to page 1 */ |
| 38852 | 38854 | }; |
| 38853 | 38855 | |
| 38854 | | -/* |
| 38855 | | -** Some of the assert() macros in this code are too expensive to run |
| 38856 | | -** even during normal debugging. Use them only rarely on long-running |
| 38857 | | -** tests. Enable the expensive asserts using the |
| 38858 | | -** -DSQLITE_ENABLE_EXPENSIVE_ASSERT=1 compile-time option. |
| 38859 | | -*/ |
| 38860 | | -#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT |
| 38861 | | -# define expensive_assert(X) assert(X) |
| 38862 | | -#else |
| 38863 | | -# define expensive_assert(X) |
| 38864 | | -#endif |
| 38865 | | - |
| 38866 | 38856 | /********************************** Linked List Management ********************/ |
| 38867 | 38857 | |
| 38868 | 38858 | /* Allowed values for second argument to pcacheManageDirtyList() */ |
| 38869 | 38859 | #define PCACHE_DIRTYLIST_REMOVE 1 /* Remove pPage from dirty list */ |
| 38870 | 38860 | #define PCACHE_DIRTYLIST_ADD 2 /* Add pPage to the dirty list */ |
| | @@ -82230,11 +82220,11 @@ |
| 82230 | 82220 | Expr *pLeft, /* Left operand */ |
| 82231 | 82221 | Expr *pRight, /* Right operand */ |
| 82232 | 82222 | const Token *pToken /* Argument token */ |
| 82233 | 82223 | ){ |
| 82234 | 82224 | Expr *p; |
| 82235 | | - if( op==TK_AND && pLeft && pRight ){ |
| 82225 | + if( op==TK_AND && pLeft && pRight && pParse->nErr==0 ){ |
| 82236 | 82226 | /* Take advantage of short-circuit false optimization for AND */ |
| 82237 | 82227 | p = sqlite3ExprAnd(pParse->db, pLeft, pRight); |
| 82238 | 82228 | }else{ |
| 82239 | 82229 | p = sqlite3ExprAlloc(pParse->db, op, pToken, 1); |
| 82240 | 82230 | sqlite3ExprAttachSubtrees(pParse->db, p, pLeft, pRight); |
| | @@ -85784,14 +85774,15 @@ |
| 85784 | 85774 | ** NEVER() will need to be removed. */ |
| 85785 | 85775 | if( pExpr->op==TK_COLUMN || NEVER(pExpr->op==TK_AGG_COLUMN) ){ |
| 85786 | 85776 | int i; |
| 85787 | 85777 | struct SrcCount *p = pWalker->u.pSrcCount; |
| 85788 | 85778 | SrcList *pSrc = p->pSrc; |
| 85789 | | - for(i=0; i<pSrc->nSrc; i++){ |
| 85779 | + int nSrc = pSrc ? pSrc->nSrc : 0; |
| 85780 | + for(i=0; i<nSrc; i++){ |
| 85790 | 85781 | if( pExpr->iTable==pSrc->a[i].iCursor ) break; |
| 85791 | 85782 | } |
| 85792 | | - if( i<pSrc->nSrc ){ |
| 85783 | + if( i<nSrc ){ |
| 85793 | 85784 | p->nThis++; |
| 85794 | 85785 | }else{ |
| 85795 | 85786 | p->nOther++; |
| 85796 | 85787 | } |
| 85797 | 85788 | } |
| | @@ -105271,24 +105262,29 @@ |
| 105271 | 105262 | u8 sortFlags; /* Zero or more SORTFLAG_* bits */ |
| 105272 | 105263 | }; |
| 105273 | 105264 | #define SORTFLAG_UseSorter 0x01 /* Use SorterOpen instead of OpenEphemeral */ |
| 105274 | 105265 | |
| 105275 | 105266 | /* |
| 105276 | | -** Delete all the content of a Select structure but do not deallocate |
| 105277 | | -** the select structure itself. |
| 105267 | +** Delete all the content of a Select structure. Deallocate the structure |
| 105268 | +** itself only if bFree is true. |
| 105278 | 105269 | */ |
| 105279 | | -static void clearSelect(sqlite3 *db, Select *p){ |
| 105280 | | - sqlite3ExprListDelete(db, p->pEList); |
| 105281 | | - sqlite3SrcListDelete(db, p->pSrc); |
| 105282 | | - sqlite3ExprDelete(db, p->pWhere); |
| 105283 | | - sqlite3ExprListDelete(db, p->pGroupBy); |
| 105284 | | - sqlite3ExprDelete(db, p->pHaving); |
| 105285 | | - sqlite3ExprListDelete(db, p->pOrderBy); |
| 105286 | | - sqlite3SelectDelete(db, p->pPrior); |
| 105287 | | - sqlite3ExprDelete(db, p->pLimit); |
| 105288 | | - sqlite3ExprDelete(db, p->pOffset); |
| 105289 | | - sqlite3WithDelete(db, p->pWith); |
| 105270 | +static void clearSelect(sqlite3 *db, Select *p, int bFree){ |
| 105271 | + while( p ){ |
| 105272 | + Select *pPrior = p->pPrior; |
| 105273 | + sqlite3ExprListDelete(db, p->pEList); |
| 105274 | + sqlite3SrcListDelete(db, p->pSrc); |
| 105275 | + sqlite3ExprDelete(db, p->pWhere); |
| 105276 | + sqlite3ExprListDelete(db, p->pGroupBy); |
| 105277 | + sqlite3ExprDelete(db, p->pHaving); |
| 105278 | + sqlite3ExprListDelete(db, p->pOrderBy); |
| 105279 | + sqlite3ExprDelete(db, p->pLimit); |
| 105280 | + sqlite3ExprDelete(db, p->pOffset); |
| 105281 | + sqlite3WithDelete(db, p->pWith); |
| 105282 | + if( bFree ) sqlite3DbFree(db, p); |
| 105283 | + p = pPrior; |
| 105284 | + bFree = 1; |
| 105285 | + } |
| 105290 | 105286 | } |
| 105291 | 105287 | |
| 105292 | 105288 | /* |
| 105293 | 105289 | ** Initialize a SelectDest structure. |
| 105294 | 105290 | */ |
| | @@ -105343,12 +105339,11 @@ |
| 105343 | 105339 | pNew->pOffset = pOffset; |
| 105344 | 105340 | assert( pOffset==0 || pLimit!=0 ); |
| 105345 | 105341 | pNew->addrOpenEphm[0] = -1; |
| 105346 | 105342 | pNew->addrOpenEphm[1] = -1; |
| 105347 | 105343 | if( db->mallocFailed ) { |
| 105348 | | - clearSelect(db, pNew); |
| 105349 | | - if( pNew!=&standin ) sqlite3DbFree(db, pNew); |
| 105344 | + clearSelect(db, pNew, pNew!=&standin); |
| 105350 | 105345 | pNew = 0; |
| 105351 | 105346 | }else{ |
| 105352 | 105347 | assert( pNew->pSrc!=0 || pParse->nErr>0 ); |
| 105353 | 105348 | } |
| 105354 | 105349 | assert( pNew!=&standin ); |
| | @@ -105369,14 +105364,11 @@ |
| 105369 | 105364 | |
| 105370 | 105365 | /* |
| 105371 | 105366 | ** Delete the given Select structure and all of its substructures. |
| 105372 | 105367 | */ |
| 105373 | 105368 | SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){ |
| 105374 | | - if( p ){ |
| 105375 | | - clearSelect(db, p); |
| 105376 | | - sqlite3DbFree(db, p); |
| 105377 | | - } |
| 105369 | + clearSelect(db, p, 1); |
| 105378 | 105370 | } |
| 105379 | 105371 | |
| 105380 | 105372 | /* |
| 105381 | 105373 | ** Return a pointer to the right-most SELECT statement in a compound. |
| 105382 | 105374 | */ |
| | @@ -107288,10 +107280,70 @@ |
| 107288 | 107280 | Parse *pParse, /* Parsing context */ |
| 107289 | 107281 | Select *p, /* The right-most of SELECTs to be coded */ |
| 107290 | 107282 | SelectDest *pDest /* What to do with query results */ |
| 107291 | 107283 | ); |
| 107292 | 107284 | |
| 107285 | +/* |
| 107286 | +** Error message for when two or more terms of a compound select have different |
| 107287 | +** size result sets. |
| 107288 | +*/ |
| 107289 | +static void selectWrongNumTermsError(Parse *pParse, Select *p){ |
| 107290 | + if( p->selFlags & SF_Values ){ |
| 107291 | + sqlite3ErrorMsg(pParse, "all VALUES must have the same number of terms"); |
| 107292 | + }else{ |
| 107293 | + sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s" |
| 107294 | + " do not have the same number of result columns", selectOpName(p->op)); |
| 107295 | + } |
| 107296 | +} |
| 107297 | + |
| 107298 | +/* |
| 107299 | +** Handle the special case of a compound-select that originates from a |
| 107300 | +** VALUES clause. By handling this as a special case, we avoid deep |
| 107301 | +** recursion, and thus do not need to enforce the SQLITE_LIMIT_COMPOUND_SELECT |
| 107302 | +** on a VALUES clause. |
| 107303 | +** |
| 107304 | +** Because the Select object originates from a VALUES clause: |
| 107305 | +** (1) It has no LIMIT or OFFSET |
| 107306 | +** (2) All terms are UNION ALL |
| 107307 | +** (3) There is no ORDER BY clause |
| 107308 | +*/ |
| 107309 | +static int multiSelectValues( |
| 107310 | + Parse *pParse, /* Parsing context */ |
| 107311 | + Select *p, /* The right-most of SELECTs to be coded */ |
| 107312 | + SelectDest *pDest /* What to do with query results */ |
| 107313 | +){ |
| 107314 | + Select *pPrior; |
| 107315 | + int nExpr = p->pEList->nExpr; |
| 107316 | + int nRow = 1; |
| 107317 | + int rc = 0; |
| 107318 | + assert( p->pNext==0 ); |
| 107319 | + assert( p->selFlags & SF_AllValues ); |
| 107320 | + do{ |
| 107321 | + assert( p->selFlags & SF_Values ); |
| 107322 | + assert( p->op==TK_ALL || (p->op==TK_SELECT && p->pPrior==0) ); |
| 107323 | + assert( p->pLimit==0 ); |
| 107324 | + assert( p->pOffset==0 ); |
| 107325 | + if( p->pEList->nExpr!=nExpr ){ |
| 107326 | + selectWrongNumTermsError(pParse, p); |
| 107327 | + return 1; |
| 107328 | + } |
| 107329 | + if( p->pPrior==0 ) break; |
| 107330 | + assert( p->pPrior->pNext==p ); |
| 107331 | + p = p->pPrior; |
| 107332 | + nRow++; |
| 107333 | + }while(1); |
| 107334 | + while( p ){ |
| 107335 | + pPrior = p->pPrior; |
| 107336 | + p->pPrior = 0; |
| 107337 | + rc = sqlite3Select(pParse, p, pDest); |
| 107338 | + p->pPrior = pPrior; |
| 107339 | + if( rc ) break; |
| 107340 | + p->nSelectRow = nRow; |
| 107341 | + p = p->pNext; |
| 107342 | + } |
| 107343 | + return rc; |
| 107344 | +} |
| 107293 | 107345 | |
| 107294 | 107346 | /* |
| 107295 | 107347 | ** This routine is called to process a compound query form from |
| 107296 | 107348 | ** two or more separate queries using UNION, UNION ALL, EXCEPT, or |
| 107297 | 107349 | ** INTERSECT |
| | @@ -107368,22 +107420,24 @@ |
| 107368 | 107420 | assert( p->pEList ); |
| 107369 | 107421 | sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iSDParm, p->pEList->nExpr); |
| 107370 | 107422 | sqlite3VdbeChangeP5(v, BTREE_UNORDERED); |
| 107371 | 107423 | dest.eDest = SRT_Table; |
| 107372 | 107424 | } |
| 107425 | + |
| 107426 | + /* Special handling for a compound-select that originates as a VALUES clause. |
| 107427 | + */ |
| 107428 | + if( p->selFlags & SF_AllValues ){ |
| 107429 | + rc = multiSelectValues(pParse, p, &dest); |
| 107430 | + goto multi_select_end; |
| 107431 | + } |
| 107373 | 107432 | |
| 107374 | 107433 | /* Make sure all SELECTs in the statement have the same number of elements |
| 107375 | 107434 | ** in their result sets. |
| 107376 | 107435 | */ |
| 107377 | 107436 | assert( p->pEList && pPrior->pEList ); |
| 107378 | 107437 | if( p->pEList->nExpr!=pPrior->pEList->nExpr ){ |
| 107379 | | - if( p->selFlags & SF_Values ){ |
| 107380 | | - sqlite3ErrorMsg(pParse, "all VALUES must have the same number of terms"); |
| 107381 | | - }else{ |
| 107382 | | - sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s" |
| 107383 | | - " do not have the same number of result columns", selectOpName(p->op)); |
| 107384 | | - } |
| 107438 | + selectWrongNumTermsError(pParse, p); |
| 107385 | 107439 | rc = 1; |
| 107386 | 107440 | goto multi_select_end; |
| 107387 | 107441 | } |
| 107388 | 107442 | |
| 107389 | 107443 | #ifndef SQLITE_OMIT_CTE |
| | @@ -109265,11 +109319,13 @@ |
| 109265 | 109319 | if( NEVER(p->pSrc==0) || (selFlags & SF_Expanded)!=0 ){ |
| 109266 | 109320 | return WRC_Prune; |
| 109267 | 109321 | } |
| 109268 | 109322 | pTabList = p->pSrc; |
| 109269 | 109323 | pEList = p->pEList; |
| 109270 | | - sqlite3WithPush(pParse, findRightmost(p)->pWith, 0); |
| 109324 | + if( pWalker->xSelectCallback2==selectPopWith ){ |
| 109325 | + sqlite3WithPush(pParse, findRightmost(p)->pWith, 0); |
| 109326 | + } |
| 109271 | 109327 | |
| 109272 | 109328 | /* Make sure cursor numbers have been assigned to all entries in |
| 109273 | 109329 | ** the FROM clause of the SELECT statement. |
| 109274 | 109330 | */ |
| 109275 | 109331 | sqlite3SrcListAssignCursors(pParse, pTabList); |
| | @@ -109556,11 +109612,13 @@ |
| 109556 | 109612 | if( pParse->hasCompound ){ |
| 109557 | 109613 | w.xSelectCallback = convertCompoundSelectToSubquery; |
| 109558 | 109614 | sqlite3WalkSelect(&w, pSelect); |
| 109559 | 109615 | } |
| 109560 | 109616 | w.xSelectCallback = selectExpander; |
| 109561 | | - w.xSelectCallback2 = selectPopWith; |
| 109617 | + if( (pSelect->selFlags & SF_AllValues)==0 ){ |
| 109618 | + w.xSelectCallback2 = selectPopWith; |
| 109619 | + } |
| 109562 | 109620 | sqlite3WalkSelect(&w, pSelect); |
| 109563 | 109621 | } |
| 109564 | 109622 | |
| 109565 | 109623 | |
| 109566 | 109624 | #ifndef SQLITE_OMIT_SUBQUERY |
| | @@ -123884,17 +123942,23 @@ |
| 123884 | 123942 | Select *p = yymsp[0].minor.yy3, *pNext, *pLoop; |
| 123885 | 123943 | if( p ){ |
| 123886 | 123944 | int cnt = 0, mxSelect; |
| 123887 | 123945 | p->pWith = yymsp[-1].minor.yy59; |
| 123888 | 123946 | if( p->pPrior ){ |
| 123947 | + u16 allValues = SF_Values; |
| 123889 | 123948 | pNext = 0; |
| 123890 | 123949 | for(pLoop=p; pLoop; pNext=pLoop, pLoop=pLoop->pPrior, cnt++){ |
| 123891 | 123950 | pLoop->pNext = pNext; |
| 123892 | 123951 | pLoop->selFlags |= SF_Compound; |
| 123952 | + allValues &= pLoop->selFlags; |
| 123893 | 123953 | } |
| 123894 | | - mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT]; |
| 123895 | | - if( mxSelect && cnt>mxSelect ){ |
| 123954 | + if( allValues ){ |
| 123955 | + p->selFlags |= SF_AllValues; |
| 123956 | + }else if( |
| 123957 | + (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 |
| 123958 | + && cnt>mxSelect |
| 123959 | + ){ |
| 123896 | 123960 | sqlite3ErrorMsg(pParse, "too many terms in compound SELECT"); |
| 123897 | 123961 | } |
| 123898 | 123962 | } |
| 123899 | 123963 | }else{ |
| 123900 | 123964 | sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy59); |
| | @@ -127600,11 +127664,11 @@ |
| 127600 | 127664 | */ |
| 127601 | 127665 | static int sqliteDefaultBusyCallback( |
| 127602 | 127666 | void *ptr, /* Database connection */ |
| 127603 | 127667 | int count /* Number of times table has been busy */ |
| 127604 | 127668 | ){ |
| 127605 | | -#if SQLITE_OS_WIN || (defined(HAVE_USLEEP) && HAVE_USLEEP) |
| 127669 | +#if SQLITE_OS_WIN || HAVE_USLEEP |
| 127606 | 127670 | static const u8 delays[] = |
| 127607 | 127671 | { 1, 2, 5, 10, 15, 20, 25, 25, 25, 50, 50, 100 }; |
| 127608 | 127672 | static const u8 totals[] = |
| 127609 | 127673 | { 0, 1, 3, 8, 18, 33, 53, 78, 103, 128, 178, 228 }; |
| 127610 | 127674 | # define NDELAY ArraySize(delays) |
| 127611 | 127675 | |