diff --git a/libsql-ffi/bundled/SQLite3MultipleCiphers/src/fileio.c b/libsql-ffi/bundled/SQLite3MultipleCiphers/src/fileio.c
index 70546adfca..ca8090ed2e 100644
--- a/libsql-ffi/bundled/SQLite3MultipleCiphers/src/fileio.c
+++ b/libsql-ffi/bundled/SQLite3MultipleCiphers/src/fileio.c
@@ -372,7 +372,9 @@ static int writeFile(
#if !defined(_WIN32) && !defined(WIN32)
if( S_ISLNK(mode) ){
const char *zTo = (const char*)sqlite3_value_text(pData);
- if( zTo==0 || symlink(zTo, zFile)<0 ) return 1;
+ if( zTo==0 ) return 1;
+ unlink(zFile);
+ if( symlink(zTo, zFile)<0 ) return 1;
}else
#endif
{
@@ -458,13 +460,19 @@ static int writeFile(
return 1;
}
#else
- /* Legacy unix */
- struct timeval times[2];
- times[0].tv_usec = times[1].tv_usec = 0;
- times[0].tv_sec = time(0);
- times[1].tv_sec = mtime;
- if( utimes(zFile, times) ){
- return 1;
+ /* Legacy unix.
+ **
+ ** Do not use utimes() on a symbolic link - it sees through the link and
+ ** modifies the timestamps on the target. Or fails if the target does
+ ** not exist. */
+ if( 0==S_ISLNK(mode) ){
+ struct timeval times[2];
+ times[0].tv_usec = times[1].tv_usec = 0;
+ times[0].tv_sec = time(0);
+ times[1].tv_sec = mtime;
+ if( utimes(zFile, times) ){
+ return 1;
+ }
}
#endif
}
diff --git a/libsql-ffi/bundled/SQLite3MultipleCiphers/src/series.c b/libsql-ffi/bundled/SQLite3MultipleCiphers/src/series.c
index abd6af7ad6..0dfed181f6 100644
--- a/libsql-ffi/bundled/SQLite3MultipleCiphers/src/series.c
+++ b/libsql-ffi/bundled/SQLite3MultipleCiphers/src/series.c
@@ -103,16 +103,20 @@ SQLITE_EXTENSION_INIT1
** index is ix. The 0th member is given by smBase. The sequence members
** progress per ix increment by smStep.
*/
-static sqlite3_int64 genSeqMember(sqlite3_int64 smBase,
- sqlite3_int64 smStep,
- sqlite3_uint64 ix){
- if( ix>=(sqlite3_uint64)LLONG_MAX ){
+static sqlite3_int64 genSeqMember(
+ sqlite3_int64 smBase,
+ sqlite3_int64 smStep,
+ sqlite3_uint64 ix
+){
+ static const sqlite3_uint64 mxI64 =
+ ((sqlite3_uint64)0x7fffffff)<<32 | 0xffffffff;
+ if( ix>=mxI64 ){
/* Get ix into signed i64 range. */
- ix -= (sqlite3_uint64)LLONG_MAX;
+ ix -= mxI64;
/* With 2's complement ALU, this next can be 1 step, but is split into
* 2 for UBSAN's satisfaction (and hypothetical 1's complement ALUs.) */
- smBase += (LLONG_MAX/2) * smStep;
- smBase += (LLONG_MAX - LLONG_MAX/2) * smStep;
+ smBase += (mxI64/2) * smStep;
+ smBase += (mxI64 - mxI64/2) * smStep;
}
/* Under UBSAN (or on 1's complement machines), must do this last term
* in steps to avoid the dreaded (and harmless) signed multiply overlow. */
@@ -372,13 +376,13 @@ static int seriesEof(sqlite3_vtab_cursor *cur){
** parameter. (idxStr is not used in this implementation.) idxNum
** is a bitmask showing which constraints are available:
**
-** 1: start=VALUE
-** 2: stop=VALUE
-** 4: step=VALUE
-**
-** Also, if bit 8 is set, that means that the series should be output
-** in descending order rather than in ascending order. If bit 16 is
-** set, then output must appear in ascending order.
+** 0x01: start=VALUE
+** 0x02: stop=VALUE
+** 0x04: step=VALUE
+** 0x08: descending order
+** 0x10: ascending order
+** 0x20: LIMIT VALUE
+** 0x40: OFFSET VALUE
**
** This routine should initialize the cursor and position it so that it
** is pointing at the first row, or pointing off the end of the table
@@ -392,26 +396,44 @@ static int seriesFilter(
series_cursor *pCur = (series_cursor *)pVtabCursor;
int i = 0;
(void)idxStrUnused;
- if( idxNum & 1 ){
+ if( idxNum & 0x01 ){
pCur->ss.iBase = sqlite3_value_int64(argv[i++]);
}else{
pCur->ss.iBase = 0;
}
- if( idxNum & 2 ){
+ if( idxNum & 0x02 ){
pCur->ss.iTerm = sqlite3_value_int64(argv[i++]);
}else{
pCur->ss.iTerm = 0xffffffff;
}
- if( idxNum & 4 ){
+ if( idxNum & 0x04 ){
pCur->ss.iStep = sqlite3_value_int64(argv[i++]);
if( pCur->ss.iStep==0 ){
pCur->ss.iStep = 1;
}else if( pCur->ss.iStep<0 ){
- if( (idxNum & 16)==0 ) idxNum |= 8;
+ if( (idxNum & 0x10)==0 ) idxNum |= 0x08;
}
}else{
pCur->ss.iStep = 1;
}
+ if( idxNum & 0x20 ){
+ sqlite3_int64 iLimit = sqlite3_value_int64(argv[i++]);
+ sqlite3_int64 iTerm;
+ if( idxNum & 0x40 ){
+ sqlite3_int64 iOffset = sqlite3_value_int64(argv[i++]);
+ if( iOffset>0 ){
+ pCur->ss.iBase += pCur->ss.iStep*iOffset;
+ }
+ }
+ if( iLimit>=0 ){
+ iTerm = pCur->ss.iBase + (iLimit - 1)*pCur->ss.iStep;
+ if( pCur->ss.iStep<0 ){
+ if( iTerm>pCur->ss.iTerm ) pCur->ss.iTerm = iTerm;
+ }else{
+ if( iTermss.iTerm ) pCur->ss.iTerm = iTerm;
+ }
+ }
+ }
for(i=0; iss.isReversing = pCur->ss.iStep > 0;
}else{
pCur->ss.isReversing = pCur->ss.iStep < 0;
@@ -442,10 +464,13 @@ static int seriesFilter(
**
** The query plan is represented by bits in idxNum:
**
-** (1) start = $value -- constraint exists
-** (2) stop = $value -- constraint exists
-** (4) step = $value -- constraint exists
-** (8) output in descending order
+** 0x01 start = $value -- constraint exists
+** 0x02 stop = $value -- constraint exists
+** 0x04 step = $value -- constraint exists
+** 0x08 output is in descending order
+** 0x10 output is in ascending order
+** 0x20 LIMIT $value -- constraint exists
+** 0x40 OFFSET $value -- constraint exists
*/
static int seriesBestIndex(
sqlite3_vtab *pVTab,
@@ -453,10 +478,12 @@ static int seriesBestIndex(
){
int i, j; /* Loop over constraints */
int idxNum = 0; /* The query plan bitmask */
+#ifndef ZERO_ARGUMENT_GENERATE_SERIES
int bStartSeen = 0; /* EQ constraint seen on the START column */
+#endif
int unusableMask = 0; /* Mask of unusable constraints */
int nArg = 0; /* Number of arguments that seriesFilter() expects */
- int aIdx[3]; /* Constraints on start, stop, and step */
+ int aIdx[5]; /* Constraints on start, stop, step, LIMIT, OFFSET */
const struct sqlite3_index_constraint *pConstraint;
/* This implementation assumes that the start, stop, and step columns
@@ -464,28 +491,54 @@ static int seriesBestIndex(
assert( SERIES_COLUMN_STOP == SERIES_COLUMN_START+1 );
assert( SERIES_COLUMN_STEP == SERIES_COLUMN_START+2 );
- aIdx[0] = aIdx[1] = aIdx[2] = -1;
+ aIdx[0] = aIdx[1] = aIdx[2] = aIdx[3] = aIdx[4] = -1;
pConstraint = pIdxInfo->aConstraint;
for(i=0; inConstraint; i++, pConstraint++){
int iCol; /* 0 for start, 1 for stop, 2 for step */
int iMask; /* bitmask for those column */
+ int op = pConstraint->op;
+ if( op>=SQLITE_INDEX_CONSTRAINT_LIMIT
+ && op<=SQLITE_INDEX_CONSTRAINT_OFFSET
+ ){
+ if( pConstraint->usable==0 ){
+ /* do nothing */
+ }else if( op==SQLITE_INDEX_CONSTRAINT_LIMIT ){
+ aIdx[3] = i;
+ idxNum |= 0x20;
+ }else{
+ assert( op==SQLITE_INDEX_CONSTRAINT_OFFSET );
+ aIdx[4] = i;
+ idxNum |= 0x40;
+ }
+ continue;
+ }
if( pConstraint->iColumniColumn - SERIES_COLUMN_START;
assert( iCol>=0 && iCol<=2 );
iMask = 1 << iCol;
- if( iCol==0 ) bStartSeen = 1;
+#ifndef ZERO_ARGUMENT_GENERATE_SERIES
+ if( iCol==0 && op==SQLITE_INDEX_CONSTRAINT_EQ ){
+ bStartSeen = 1;
+ }
+#endif
if( pConstraint->usable==0 ){
unusableMask |= iMask;
continue;
- }else if( pConstraint->op==SQLITE_INDEX_CONSTRAINT_EQ ){
+ }else if( op==SQLITE_INDEX_CONSTRAINT_EQ ){
idxNum |= iMask;
aIdx[iCol] = i;
}
}
- for(i=0; i<3; i++){
+ if( aIdx[3]==0 ){
+ /* Ignore OFFSET if LIMIT is omitted */
+ idxNum &= ~0x60;
+ aIdx[4] = 0;
+ }
+ for(i=0; i<5; i++){
if( (j = aIdx[i])>=0 ){
pIdxInfo->aConstraintUsage[j].argvIndex = ++nArg;
- pIdxInfo->aConstraintUsage[j].omit = !SQLITE_SERIES_CONSTRAINT_VERIFY;
+ pIdxInfo->aConstraintUsage[j].omit =
+ !SQLITE_SERIES_CONSTRAINT_VERIFY || i>=3;
}
}
/* The current generate_column() implementation requires at least one
@@ -506,19 +559,22 @@ static int seriesBestIndex(
** this plan is unusable */
return SQLITE_CONSTRAINT;
}
- if( (idxNum & 3)==3 ){
+ if( (idxNum & 0x03)==0x03 ){
/* Both start= and stop= boundaries are available. This is the
** the preferred case */
pIdxInfo->estimatedCost = (double)(2 - ((idxNum&4)!=0));
pIdxInfo->estimatedRows = 1000;
if( pIdxInfo->nOrderBy>=1 && pIdxInfo->aOrderBy[0].iColumn==0 ){
if( pIdxInfo->aOrderBy[0].desc ){
- idxNum |= 8;
+ idxNum |= 0x08;
}else{
- idxNum |= 16;
+ idxNum |= 0x10;
}
pIdxInfo->orderByConsumed = 1;
}
+ }else if( (idxNum & 0x21)==0x21 ){
+ /* We have start= and LIMIT */
+ pIdxInfo->estimatedRows = 2500;
}else{
/* If either boundary is missing, we have to generate a huge span
** of numbers. Make this case very expensive so that the query
diff --git a/libsql-ffi/bundled/bindings/session_bindgen.rs b/libsql-ffi/bundled/bindings/session_bindgen.rs
index f2621f1d43..0865bdcd53 100644
--- a/libsql-ffi/bundled/bindings/session_bindgen.rs
+++ b/libsql-ffi/bundled/bindings/session_bindgen.rs
@@ -23,10 +23,10 @@ extern "C" {
) -> ::std::os::raw::c_int;
}
-pub const SQLITE_VERSION: &[u8; 7] = b"3.45.1\0";
-pub const SQLITE_VERSION_NUMBER: i32 = 3045001;
+pub const SQLITE_VERSION: &[u8; 7] = b"3.46.1\0";
+pub const SQLITE_VERSION_NUMBER: i32 = 3046001;
pub const SQLITE_SOURCE_ID: &[u8; 85] =
- b"2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257ccalt1\0";
+ b"2024-08-13 09:16:08 c9c2ab54ba1f5f46360f1b4f35d849cd3f080e6fc2b6c60e91b16c63f69aalt1\0";
pub const LIBSQL_VERSION: &[u8; 6] = b"0.2.3\0";
pub const SQLITE_OK: i32 = 0;
pub const SQLITE_ERROR: i32 = 1;
@@ -263,6 +263,7 @@ pub const SQLITE_CONFIG_STMTJRNL_SPILL: i32 = 26;
pub const SQLITE_CONFIG_SMALL_MALLOC: i32 = 27;
pub const SQLITE_CONFIG_SORTERREF_SIZE: i32 = 28;
pub const SQLITE_CONFIG_MEMDB_MAXSIZE: i32 = 29;
+pub const SQLITE_CONFIG_ROWID_IN_VIEW: i32 = 30;
pub const SQLITE_DBCONFIG_MAINDBNAME: i32 = 1000;
pub const SQLITE_DBCONFIG_LOOKASIDE: i32 = 1001;
pub const SQLITE_DBCONFIG_ENABLE_FKEY: i32 = 1002;
@@ -956,7 +957,7 @@ extern "C" {
extern "C" {
pub fn sqlite3_vmprintf(
arg1: *const ::std::os::raw::c_char,
- arg2: va_list,
+ arg2: *mut __va_list_tag,
) -> *mut ::std::os::raw::c_char;
}
extern "C" {
@@ -972,7 +973,7 @@ extern "C" {
arg1: ::std::os::raw::c_int,
arg2: *mut ::std::os::raw::c_char,
arg3: *const ::std::os::raw::c_char,
- arg4: va_list,
+ arg4: *mut __va_list_tag,
) -> *mut ::std::os::raw::c_char;
}
extern "C" {
@@ -2522,7 +2523,7 @@ extern "C" {
pub fn sqlite3_str_vappendf(
arg1: *mut sqlite3_str,
zFormat: *const ::std::os::raw::c_char,
- arg2: va_list,
+ arg2: *mut __va_list_tag,
);
}
extern "C" {
@@ -3227,6 +3228,12 @@ extern "C" {
pData: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
+extern "C" {
+ pub fn sqlite3changegroup_add_change(
+ arg1: *mut sqlite3_changegroup,
+ arg2: *mut sqlite3_changeset_iter,
+ ) -> ::std::os::raw::c_int;
+}
extern "C" {
pub fn sqlite3changegroup_output(
arg1: *mut sqlite3_changegroup,
@@ -4085,4 +4092,12 @@ extern "C" {
extern "C" {
pub static sqlite3_wal_manager: libsql_wal_manager;
}
-pub type __builtin_va_list = *mut ::std::os::raw::c_char;
+pub type __builtin_va_list = [__va_list_tag; 1usize];
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct __va_list_tag {
+ pub gp_offset: ::std::os::raw::c_uint,
+ pub fp_offset: ::std::os::raw::c_uint,
+ pub overflow_arg_area: *mut ::std::os::raw::c_void,
+ pub reg_save_area: *mut ::std::os::raw::c_void,
+}
diff --git a/libsql-ffi/bundled/src/sqlite3.c b/libsql-ffi/bundled/src/sqlite3.c
index 8dc3ca8e72..a359ab4bfc 100644
--- a/libsql-ffi/bundled/src/sqlite3.c
+++ b/libsql-ffi/bundled/src/sqlite3.c
@@ -1,6 +1,6 @@
/******************************************************************************
** This file is an amalgamation of many separate C source files from SQLite
-** version 3.45.1. By combining all the individual C code files into this
+** version 3.46.1. 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
@@ -18,7 +18,7 @@
** separate file. This file contains only code for the core SQLite library.
**
** The content in this amalgamation comes from Fossil check-in
-** e876e51a0ed5c5b3126f52e532044363a014 with changes in files:
+** c9c2ab54ba1f5f46360f1b4f35d849cd3f08 with changes in files:
**
** .fossil-settings/empty-dirs
** .fossil-settings/ignore-glob
@@ -26,21 +26,20 @@
** Makefile.in
** Makefile.msc
** README.md
-** configure
** configure.ac
** doc/compile-for-windows.md
** doc/jsonb.md
-** doc/testrunner.md
** doc/trusted-schema.md
** doc/vdbesort-memory.md
** doc/wal-lock.md
-** ext/fts5/fts5_tokenize.c
** ext/jni/README.md
** ext/jni/src/org/sqlite/jni/capi/CollationNeededCallback.java
** ext/jni/src/org/sqlite/jni/capi/CommitHookCallback.java
** ext/jni/src/org/sqlite/jni/capi/PreupdateHookCallback.java
** ext/jni/src/org/sqlite/jni/capi/RollbackHookCallback.java
** ext/jni/src/org/sqlite/jni/capi/ValueHolder.java
+** ext/misc/fileio.c
+** ext/misc/series.c
** ext/wasm/GNUmakefile
** ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api
** ext/wasm/api/sqlite3-api-glue.js
@@ -89,7 +88,6 @@
** src/wherecode.c
** test/all.test
** test/json/README.md
-** test/permutations.test
** test/rowvaluevtab.test
** tool/mkkeywordhash.c
** tool/mksqlite3c-noext.tcl
@@ -546,9 +544,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.45.1"
-#define SQLITE_VERSION_NUMBER 3045001
-#define SQLITE_SOURCE_ID "2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257ccalt1"
+#define SQLITE_VERSION "3.46.1"
+#define SQLITE_VERSION_NUMBER 3046001
+#define SQLITE_SOURCE_ID "2024-08-13 09:16:08 c9c2ab54ba1f5f46360f1b4f35d849cd3f080e6fc2b6c60e91b16c63f69aalt1"
#define LIBSQL_VERSION "0.2.3"
@@ -824,6 +822,8 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**);
** the 1st parameter to sqlite3_exec() while sqlite3_exec() is running.
**
The application must not modify the SQL statement text passed into
** the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running.
+**
The application must not dereference the arrays or string pointers
+** passed as the 3rd and 4th callback parameters after it returns.
**
*/
SQLITE_API int sqlite3_exec(
@@ -1166,11 +1166,11 @@ struct sqlite3_file {
**
** xLock() upgrades the database file lock. In other words, xLock() moves the
** database file lock in the direction NONE toward EXCLUSIVE. The argument to
-** xLock() is always on of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
+** xLock() is always one of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
** SQLITE_LOCK_NONE. If the database file lock is already at or above the
** requested lock, then the call to xLock() is a no-op.
** xUnlock() downgrades the database file lock to either SHARED or NONE.
-* If the lock is already at or below the requested lock state, then the call
+** If the lock is already at or below the requested lock state, then the call
** to xUnlock() is a no-op.
** The xCheckReservedLock() method checks whether any database connection,
** either in this process or in some other process, is holding a RESERVED,
@@ -2565,6 +2565,22 @@ struct sqlite3_mem_methods {
** configuration setting is never used, then the default maximum is determined
** by the [SQLITE_MEMDB_DEFAULT_MAXSIZE] compile-time option. If that
** compile-time option is not set, then the default maximum is 1073741824.
+**
+** [[SQLITE_CONFIG_ROWID_IN_VIEW]]
+**
SQLITE_CONFIG_ROWID_IN_VIEW
+**
The SQLITE_CONFIG_ROWID_IN_VIEW option enables or disables the ability
+** for VIEWs to have a ROWID. The capability can only be enabled if SQLite is
+** compiled with -DSQLITE_ALLOW_ROWID_IN_VIEW, in which case the capability
+** defaults to on. This configuration option queries the current setting or
+** changes the setting to off or on. The argument is a pointer to an integer.
+** If that integer initially holds a value of 1, then the ability for VIEWs to
+** have ROWIDs is activated. If the integer initially holds zero, then the
+** ability is deactivated. Any other initial value for the integer leaves the
+** setting unchanged. After changes, if any, the integer is written with
+** a 1 or 0, if the ability for VIEWs to have ROWIDs is on or off. If SQLite
+** is compiled without -DSQLITE_ALLOW_ROWID_IN_VIEW (which is the usual and
+** recommended case) then the integer is always filled with zero, regardless
+** if its initial value.
**
*/
#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
@@ -2596,6 +2612,7 @@ struct sqlite3_mem_methods {
#define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */
#define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */
#define SQLITE_CONFIG_MEMDB_MAXSIZE 29 /* sqlite3_int64 */
+#define SQLITE_CONFIG_ROWID_IN_VIEW 30 /* int* */
/*
** CAPI3REF: Database Connection Configuration Options
@@ -3710,8 +3727,8 @@ SQLITE_API int sqlite3_set_authorizer(
#define SQLITE_RECURSIVE 33 /* NULL NULL */
/*
-** CAPI3REF: Tracing And Profiling Functions
-** METHOD: sqlite3
+** CAPI3REF: Deprecated Tracing And Profiling Functions
+** DEPRECATED
**
** These routines are deprecated. Use the [sqlite3_trace_v2()] interface
** instead of the routines described here.
@@ -7328,6 +7345,12 @@ SQLITE_API int sqlite3_autovacuum_pages(
** The exceptions defined in this paragraph might change in a future
** release of SQLite.
**
+** Whether the update hook is invoked before or after the
+** corresponding change is currently unspecified and may differ
+** depending on the type of change. Do not rely on the order of the
+** hook call with regards to the final result of the operation which
+** triggers the hook.
+**
** The update hook implementation must not do anything that will modify
** the database connection that invoked the update hook. Any actions
** to modify the database connection must be deferred until after the
@@ -8825,7 +8848,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
** The sqlite3_keyword_count() interface returns the number of distinct
** keywords understood by SQLite.
**
-** The sqlite3_keyword_name(N,Z,L) interface finds the N-th keyword and
+** The sqlite3_keyword_name(N,Z,L) interface finds the 0-based N-th keyword and
** makes *Z point to that keyword expressed as UTF8 and writes the number
** of bytes in the keyword into *L. The string that *Z points to is not
** zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns
@@ -10420,24 +10443,45 @@ SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
**
** ^(If the sqlite3_vtab_distinct() interface returns 2, that means
** that the query planner does not need the rows returned in any particular
-** order, as long as rows with the same values in all "aOrderBy" columns
-** are adjacent.)^ ^(Furthermore, only a single row for each particular
-** combination of values in the columns identified by the "aOrderBy" field
-** needs to be returned.)^ ^It is always ok for two or more rows with the same
-** values in all "aOrderBy" columns to be returned, as long as all such rows
-** are adjacent. ^The virtual table may, if it chooses, omit extra rows
-** that have the same value for all columns identified by "aOrderBy".
-** ^However omitting the extra rows is optional.
+** order, as long as rows with the same values in all columns identified
+** by "aOrderBy" are adjacent.)^ ^(Furthermore, when two or more rows
+** contain the same values for all columns identified by "colUsed", all but
+** one such row may optionally be omitted from the result.)^
+** The virtual table is not required to omit rows that are duplicates
+** over the "colUsed" columns, but if the virtual table can do that without
+** too much extra effort, it could potentially help the query to run faster.
** This mode is used for a DISTINCT query.
**
-** ^(If the sqlite3_vtab_distinct() interface returns 3, that means
-** that the query planner needs only distinct rows but it does need the
-** rows to be sorted.)^ ^The virtual table implementation is free to omit
-** rows that are identical in all aOrderBy columns, if it wants to, but
-** it is not required to omit any rows. This mode is used for queries
+** ^(If the sqlite3_vtab_distinct() interface returns 3, that means the
+** virtual table must return rows in the order defined by "aOrderBy" as
+** if the sqlite3_vtab_distinct() interface had returned 0. However if
+** two or more rows in the result have the same values for all columns
+** identified by "colUsed", then all but one such row may optionally be
+** omitted.)^ Like when the return value is 2, the virtual table
+** is not required to omit rows that are duplicates over the "colUsed"
+** columns, but if the virtual table can do that without
+** too much extra effort, it could potentially help the query to run faster.
+** This mode is used for queries
** that have both DISTINCT and ORDER BY clauses.
**
**
+**
The following table summarizes the conditions under which the
+** virtual table is allowed to set the "orderByConsumed" flag based on
+** the value returned by sqlite3_vtab_distinct(). This table is a
+** restatement of the previous four paragraphs:
+**
+**
+**
+**
sqlite3_vtab_distinct() return value
+**
Rows are returned in aOrderBy order
+**
Rows with the same value in all aOrderBy columns are adjacent
+**
Duplicates over all colUsed columns may be omitted
+**
0
yes
yes
no
+**
1
no
yes
no
+**
2
no
yes
yes
+**
3
yes
yes
yes
+**
+**
** ^For the purposes of comparing virtual table output values to see if the
** values are same value for sorting purposes, two NULL values are considered
** to be the same. In other words, the comparison operator is "IS"
@@ -12552,6 +12596,30 @@ SQLITE_API int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const c
*/
SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData);
+/*
+** CAPI3REF: Add A Single Change To A Changegroup
+** METHOD: sqlite3_changegroup
+**
+** This function adds the single change currently indicated by the iterator
+** passed as the second argument to the changegroup object. The rules for
+** adding the change are just as described for [sqlite3changegroup_add()].
+**
+** If the change is successfully added to the changegroup, SQLITE_OK is
+** returned. Otherwise, an SQLite error code is returned.
+**
+** The iterator must point to a valid entry when this function is called.
+** If it does not, SQLITE_ERROR is returned and no change is added to the
+** changegroup. Additionally, the iterator must not have been opened with
+** the SQLITE_CHANGESETAPPLY_INVERT flag. In this case SQLITE_ERROR is also
+** returned.
+*/
+SQLITE_API int sqlite3changegroup_add_change(
+ sqlite3_changegroup*,
+ sqlite3_changeset_iter*
+);
+
+
+
/*
** CAPI3REF: Obtain A Composite Changeset From A Changegroup
** METHOD: sqlite3_changegroup
@@ -13356,8 +13424,8 @@ struct Fts5PhraseIter {
** EXTENSION API FUNCTIONS
**
** xUserData(pFts):
-** Return a copy of the context pointer the extension function was
-** registered with.
+** Return a copy of the pUserData pointer passed to the xCreateFunction()
+** API when the extension function was registered.
**
** xColumnTotalSize(pFts, iCol, pnToken):
** If parameter iCol is less than zero, set output variable *pnToken
@@ -14911,6 +14979,8 @@ SQLITE_API void libsql_wasm_engine_free(libsql_wasm_engine_t *);
# define SQLITE_OMIT_ALTERTABLE
#endif
+#define SQLITE_DIGIT_SEPARATOR '_'
+
/*
** Return true (non-zero) if the input is an integer that is too large
** to fit in 32-bits. This macro is used inside of various testcase()
@@ -15206,8 +15276,8 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
#define TK_AGG_COLUMN 173
#define TK_TRUEFALSE 174
#define TK_ISNOT 175
-#define TK_UMINUS 176
-#define TK_UPLUS 177
+#define TK_UPLUS 176
+#define TK_UMINUS 177
#define TK_TRUTH 178
#define TK_REGISTER 179
#define TK_VECTOR 180
@@ -15216,8 +15286,9 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
#define TK_ASTERISK 183
#define TK_SPAN 184
#define TK_ERROR 185
-#define TK_SPACE 186
-#define TK_ILLEGAL 187
+#define TK_QNUMBER 186
+#define TK_SPACE 187
+#define TK_ILLEGAL 188
/************** End of parse.h ***********************************************/
/************** Continuing where we left off in sqliteInt.h ******************/
@@ -15479,7 +15550,7 @@ typedef INT16_TYPE LogEst;
# define SQLITE_PTRSIZE __SIZEOF_POINTER__
# elif defined(i386) || defined(__i386__) || defined(_M_IX86) || \
defined(_M_ARM) || defined(__arm__) || defined(__x86) || \
- (defined(__APPLE__) && defined(__POWERPC__)) || \
+ (defined(__APPLE__) && defined(__ppc__)) || \
(defined(__TOS_AIX__) && !defined(__64BIT__))
# define SQLITE_PTRSIZE 4
# else
@@ -15716,6 +15787,7 @@ SQLITE_PRIVATE u32 sqlite3TreeTrace;
** 0x00010000 Beginning of DELETE/INSERT/UPDATE processing
** 0x00020000 Transform DISTINCT into GROUP BY
** 0x00040000 SELECT tree dump after all code has been generated
+** 0x00080000 NOT NULL strength reduction
*/
/*
@@ -15746,7 +15818,7 @@ SQLITE_PRIVATE u32 sqlite3WhereTrace;
** 0x00000010 Display sqlite3_index_info xBestIndex calls
** 0x00000020 Range an equality scan metrics
** 0x00000040 IN operator decisions
-** 0x00000080 WhereLoop cost adjustements
+** 0x00000080 WhereLoop cost adjustments
** 0x00000100
** 0x00000200 Covering index decisions
** 0x00000400 OR optimization
@@ -16910,6 +16982,7 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck(
sqlite3 *db, /* Database connection that is running the check */
Btree *p, /* The btree to be checked */
Pgno *aRoot, /* An array of root pages numbers for individual trees */
+ sqlite3_value *aCnt, /* OUT: entry counts for each btree in aRoot[] */
int nRoot, /* Number of entries in aRoot[] */
int mxErr, /* Stop reporting errors after this many */
int *pnErr, /* OUT: Write number of errors seen to this variable */
@@ -17180,12 +17253,12 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_Vacuum 5
#define OP_VFilter 6 /* jump, synopsis: iplan=r[P3] zplan='P4' */
#define OP_VUpdate 7 /* synopsis: data=r[P3@P2] */
-#define OP_Init 8 /* jump, synopsis: Start at P2 */
+#define OP_Init 8 /* jump0, synopsis: Start at P2 */
#define OP_Goto 9 /* jump */
#define OP_Gosub 10 /* jump */
-#define OP_InitCoroutine 11 /* jump */
-#define OP_Yield 12 /* jump */
-#define OP_MustBeInt 13 /* jump */
+#define OP_InitCoroutine 11 /* jump0 */
+#define OP_Yield 12 /* jump0 */
+#define OP_MustBeInt 13 /* jump0 */
#define OP_Jump 14 /* jump */
#define OP_Once 15 /* jump */
#define OP_If 16 /* jump */
@@ -17193,22 +17266,22 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_IsType 18 /* jump, synopsis: if typeof(P1.P3) in P5 goto P2 */
#define OP_IfNullRow 19 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */
#define OP_Not 20 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */
-#define OP_SeekLT 21 /* jump, synopsis: key=r[P3@P4] */
-#define OP_SeekLE 22 /* jump, synopsis: key=r[P3@P4] */
-#define OP_SeekGE 23 /* jump, synopsis: key=r[P3@P4] */
-#define OP_SeekGT 24 /* jump, synopsis: key=r[P3@P4] */
+#define OP_SeekLT 21 /* jump0, synopsis: key=r[P3@P4] */
+#define OP_SeekLE 22 /* jump0, synopsis: key=r[P3@P4] */
+#define OP_SeekGE 23 /* jump0, synopsis: key=r[P3@P4] */
+#define OP_SeekGT 24 /* jump0, synopsis: key=r[P3@P4] */
#define OP_IfNotOpen 25 /* jump, synopsis: if( !csr[P1] ) goto P2 */
#define OP_IfNoHope 26 /* jump, synopsis: key=r[P3@P4] */
#define OP_NoConflict 27 /* jump, synopsis: key=r[P3@P4] */
#define OP_NotFound 28 /* jump, synopsis: key=r[P3@P4] */
#define OP_Found 29 /* jump, synopsis: key=r[P3@P4] */
-#define OP_SeekRowid 30 /* jump, synopsis: intkey=r[P3] */
+#define OP_SeekRowid 30 /* jump0, synopsis: intkey=r[P3] */
#define OP_NotExists 31 /* jump, synopsis: intkey=r[P3] */
-#define OP_Last 32 /* jump */
-#define OP_IfSmaller 33 /* jump */
+#define OP_Last 32 /* jump0 */
+#define OP_IfSizeBetween 33 /* jump */
#define OP_SorterSort 34 /* jump */
#define OP_Sort 35 /* jump */
-#define OP_Rewind 36 /* jump */
+#define OP_Rewind 36 /* jump0 */
#define OP_SorterNext 37 /* jump */
#define OP_Prev 38 /* jump */
#define OP_Next 39 /* jump */
@@ -17218,7 +17291,7 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_IdxGE 43 /* jump, synopsis: key=r[P3@P4] */
#define OP_RowSetRead 44 /* jump, synopsis: r[P3]=rowset(P1) */
#define OP_RowSetTest 45 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */
-#define OP_Program 46 /* jump */
+#define OP_Program 46 /* jump0 */
#define OP_Or 47 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */
#define OP_And 48 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */
#define OP_FkIfZero 49 /* jump, synopsis: if fkctr[P1]==0 goto P2 */
@@ -17250,7 +17323,7 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_Null 75 /* synopsis: r[P2..P3]=NULL */
#define OP_SoftNull 76 /* synopsis: r[P1]=NULL */
#define OP_Blob 77 /* synopsis: r[P2]=P4 (len=P1) */
-#define OP_Variable 78 /* synopsis: r[P2]=parameter(P1,P4) */
+#define OP_Variable 78 /* synopsis: r[P2]=parameter(P1) */
#define OP_Move 79 /* synopsis: r[P2@P3]=r[P1@P3] */
#define OP_Copy 80 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */
#define OP_SCopy 81 /* synopsis: r[P2]=r[P1] */
@@ -17378,13 +17451,14 @@ typedef struct VdbeOpList VdbeOpList;
#define OPFLG_OUT2 0x10 /* out2: P2 is an output */
#define OPFLG_OUT3 0x20 /* out3: P3 is an output */
#define OPFLG_NCYCLE 0x40 /* ncycle:Cycles count against P1 */
+#define OPFLG_JUMP0 0x80 /* jump0: P2 might be zero */
#define OPFLG_INITIALIZER {\
/* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x41, 0x00,\
-/* 8 */ 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,\
-/* 16 */ 0x03, 0x03, 0x01, 0x01, 0x12, 0x49, 0x49, 0x49,\
-/* 24 */ 0x49, 0x01, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,\
-/* 32 */ 0x41, 0x01, 0x41, 0x41, 0x41, 0x01, 0x41, 0x41,\
-/* 40 */ 0x41, 0x41, 0x41, 0x41, 0x23, 0x0b, 0x01, 0x26,\
+/* 8 */ 0x81, 0x01, 0x01, 0x81, 0x83, 0x83, 0x01, 0x01,\
+/* 16 */ 0x03, 0x03, 0x01, 0x01, 0x12, 0xc9, 0xc9, 0xc9,\
+/* 24 */ 0xc9, 0x01, 0x49, 0x49, 0x49, 0x49, 0xc9, 0x49,\
+/* 32 */ 0xc1, 0x01, 0x41, 0x41, 0xc1, 0x01, 0x41, 0x41,\
+/* 40 */ 0x41, 0x41, 0x41, 0x41, 0x23, 0x0b, 0x81, 0x26,\
/* 48 */ 0x26, 0x01, 0x03, 0x03, 0x03, 0x01, 0x03, 0x03,\
/* 56 */ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x01, 0x41,\
/* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\
@@ -17546,6 +17620,8 @@ SQLITE_PRIVATE RecordCompare sqlite3VdbeFindCompare(UnpackedRecord*);
SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *);
SQLITE_PRIVATE int sqlite3VdbeHasSubProgram(Vdbe*);
+SQLITE_PRIVATE void sqlite3MemSetArrayInt64(sqlite3_value *aMem, int iIdx, i64 val);
+
SQLITE_PRIVATE int sqlite3NotPureFunc(sqlite3_context*);
#ifdef SQLITE_ENABLE_BYTECODE_VTAB
SQLITE_PRIVATE int sqlite3VdbeBytecodeVtabInit(sqlite3*);
@@ -18152,6 +18228,10 @@ struct FuncDefHash {
};
#define SQLITE_FUNC_HASH(C,L) (((C)+(L))%SQLITE_FUNC_HASH_SZ)
+#if defined(SQLITE_USER_AUTHENTICATION)
+# warning "The SQLITE_USER_AUTHENTICATION extension is deprecated. \
+ See ext/userauth/user-auth.txt for details."
+#endif
#ifdef SQLITE_USER_AUTHENTICATION
/*
** Information held in the "sqlite3" database connection object and used
@@ -18474,7 +18554,7 @@ struct sqlite3 {
#define SQLITE_CursorHints 0x00000400 /* Add OP_CursorHint opcodes */
#define SQLITE_Stat4 0x00000800 /* Use STAT4 data */
/* TH3 expects this value ^^^^^^^^^^ to be 0x0000800. Don't change it */
-#define SQLITE_PushDown 0x00001000 /* The push-down optimization */
+#define SQLITE_PushDown 0x00001000 /* WHERE-clause push-down opt */
#define SQLITE_SimplifyJoin 0x00002000 /* Convert LEFT JOIN to JOIN */
#define SQLITE_SkipScan 0x00004000 /* Skip-scans */
#define SQLITE_PropagateConst 0x00008000 /* The constant propagation opt */
@@ -19047,8 +19127,7 @@ struct Table {
#define TF_HasStored 0x00000040 /* Has one or more STORED columns */
#define TF_HasGenerated 0x00000060 /* Combo: HasVirtual + HasStored */
#define TF_WithoutRowid 0x00000080 /* No rowid. PRIMARY KEY is the key */
-#define TF_StatsUsed 0x00000100 /* Query planner decisions affected by
- ** Index.aiRowLogEst[] values */
+#define TF_MaybeReanalyze 0x00000100 /* Maybe run ANALYZE on this table */
#define TF_NoVisibleRowid 0x00000200 /* No user-visible "rowid" column */
#define TF_OOOHidden 0x00000400 /* Out-of-Order hidden columns */
#define TF_HasNotNull 0x00000800 /* Contains NOT NULL constraints */
@@ -19108,6 +19187,15 @@ struct Table {
#define HasRowid(X) (((X)->tabFlags & TF_WithoutRowid)==0)
#define VisibleRowid(X) (((X)->tabFlags & TF_NoVisibleRowid)==0)
+/* Macro is true if the SQLITE_ALLOW_ROWID_IN_VIEW (mis-)feature is
+** available. By default, this macro is false
+*/
+#ifndef SQLITE_ALLOW_ROWID_IN_VIEW
+# define ViewCanHaveRowid 0
+#else
+# define ViewCanHaveRowid (sqlite3Config.mNoVisibleRowid==0)
+#endif
+
/*
** Each foreign key constraint is an instance of the following structure.
**
@@ -19853,10 +19941,12 @@ struct IdList {
**
** Union member validity:
**
-** u1.zIndexedBy fg.isIndexedBy && !fg.isTabFunc
-** u1.pFuncArg fg.isTabFunc && !fg.isIndexedBy
-** u2.pIBIndex fg.isIndexedBy && !fg.isCte
-** u2.pCteUse fg.isCte && !fg.isIndexedBy
+** u1.zIndexedBy fg.isIndexedBy && !fg.isTabFunc
+** u1.pFuncArg fg.isTabFunc && !fg.isIndexedBy
+** u1.nRow !fg.isTabFunc && !fg.isIndexedBy
+**
+** u2.pIBIndex fg.isIndexedBy && !fg.isCte
+** u2.pCteUse fg.isCte && !fg.isIndexedBy
*/
struct SrcItem {
Schema *pSchema; /* Schema to which this item is fixed */
@@ -19884,6 +19974,7 @@ struct SrcItem {
unsigned isOn :1; /* u3.pOn was once valid and non-NULL */
unsigned isSynthUsing :1; /* u3.pUsing is synthesized from NATURAL */
unsigned isNestedFrom :1; /* pSelect is a SF_NestedFrom subquery */
+ unsigned rowidUsed :1; /* The ROWID of this table is referenced */
} fg;
int iCursor; /* The VDBE cursor number used to access this table */
union {
@@ -19894,6 +19985,7 @@ struct SrcItem {
union {
char *zIndexedBy; /* Identifier from "INDEXED BY " clause */
ExprList *pFuncArg; /* Arguments to table-valued-function */
+ u32 nRow; /* Number of rows in a VALUES clause */
} u1;
union {
Index *pIBIndex; /* Index structure corresponding to u1.zIndexedBy */
@@ -19958,7 +20050,7 @@ struct SrcList {
#define WHERE_AGG_DISTINCT 0x0400 /* Query is "SELECT agg(DISTINCT ...)" */
#define WHERE_ORDERBY_LIMIT 0x0800 /* ORDERBY+LIMIT on the inner loop */
#define WHERE_RIGHT_JOIN 0x1000 /* Processing a RIGHT JOIN */
- /* 0x2000 not currently used */
+#define WHERE_KEEP_ALL_JOINS 0x2000 /* Do not do the omit-noop-join opt */
#define WHERE_USE_LIMIT 0x4000 /* Use the LIMIT in cost estimates */
/* 0x8000 not currently used */
@@ -20037,6 +20129,7 @@ struct NameContext {
#define NC_InAggFunc 0x020000 /* True if analyzing arguments to an agg func */
#define NC_FromDDL 0x040000 /* SQL text comes from sqlite_schema */
#define NC_NoSelect 0x080000 /* Do not descend into sub-selects */
+#define NC_Where 0x100000 /* Processing WHERE clause of a SELECT */
#define NC_OrderAgg 0x8000000 /* Has an aggregate other than count/min/max */
/*
@@ -20060,6 +20153,7 @@ struct Upsert {
Expr *pUpsertWhere; /* WHERE clause for the ON CONFLICT UPDATE */
Upsert *pNextUpsert; /* Next ON CONFLICT clause in the list */
u8 isDoUpdate; /* True for DO UPDATE. False for DO NOTHING */
+ u8 isDup; /* True if 2nd or later with same pUpsertIdx */
/* Above this point is the parse tree for the ON CONFLICT clauses.
** The next group of fields stores intermediate data. */
void *pToFree; /* Free memory when deleting the Upsert object */
@@ -20149,11 +20243,12 @@ struct Select {
#define SF_View 0x0200000 /* SELECT statement is a view */
#define SF_NoopOrderBy 0x0400000 /* ORDER BY is ignored for this query */
#define SF_UFSrcCheck 0x0800000 /* Check pSrc as required by UPDATE...FROM */
-#define SF_PushDown 0x1000000 /* SELECT has be modified by push-down opt */
+#define SF_PushDown 0x1000000 /* Modified by WHERE-clause push-down opt */
#define SF_MultiPart 0x2000000 /* Has multiple incompatible PARTITIONs */
#define SF_CopyCte 0x4000000 /* SELECT statement is a copy of a CTE */
#define SF_OrderByReqd 0x8000000 /* The ORDER BY clause may not be omitted */
#define SF_UpdateFrom 0x10000000 /* Query originates with UPDATE FROM */
+#define SF_Correlated 0x20000000 /* True if references the outer context */
/* True if S exists and has SF_NestedFrom */
#define IsNestedFrom(S) ((S)!=0 && ((S)->selFlags&SF_NestedFrom)!=0)
@@ -20393,6 +20488,7 @@ struct Parse {
u8 disableLookaside; /* Number of times lookaside has been disabled */
u8 prepFlags; /* SQLITE_PREPARE_* flags */
u8 withinRJSubrtn; /* Nesting level for RIGHT JOIN body subroutines */
+ u8 bHasWith; /* True if statement contains WITH */
#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
u8 earlyCleanup; /* OOM inside sqlite3ParserAddCleanup() */
#endif
@@ -20830,6 +20926,11 @@ struct Sqlite3Config {
#endif
#ifndef SQLITE_UNTESTABLE
int (*xTestCallback)(int); /* Invoked by sqlite3FaultSim() */
+#endif
+#ifdef SQLITE_ALLOW_ROWID_IN_VIEW
+ u32 mNoVisibleRowid; /* TF_NoVisibleRowid if the ROWID_IN_VIEW
+ ** feature is disabled. 0 if rowids can
+ ** occur in views. */
#endif
int bLocaltimeFault; /* True to fail localtime() calls */
int (*xAltLocaltime)(const void*,void*); /* Alternative localtime() routine */
@@ -21067,6 +21168,9 @@ struct Window {
** due to the SQLITE_SUBTYPE flag */
};
+SQLITE_PRIVATE Select *sqlite3MultiValues(Parse *pParse, Select *pLeft, ExprList *pRow);
+SQLITE_PRIVATE void sqlite3MultiValuesEnd(Parse *pParse, Select *pVal);
+
#ifndef SQLITE_OMIT_WINDOWFUNC
SQLITE_PRIVATE void sqlite3WindowDelete(sqlite3*, Window*);
SQLITE_PRIVATE void sqlite3WindowUnlinkFromSelect(Window*);
@@ -21286,10 +21390,13 @@ SQLITE_PRIVATE void sqlite3MutexWarnOnContention(sqlite3_mutex*);
# define EXP754 (((u64)0x7ff)<<52)
# define MAN754 ((((u64)1)<<52)-1)
# define IsNaN(X) (((X)&EXP754)==EXP754 && ((X)&MAN754)!=0)
+# define IsOvfl(X) (((X)&EXP754)==EXP754)
SQLITE_PRIVATE int sqlite3IsNaN(double);
+SQLITE_PRIVATE int sqlite3IsOverflow(double);
#else
-# define IsNaN(X) 0
-# define sqlite3IsNaN(X) 0
+# define IsNaN(X) 0
+# define sqlite3IsNaN(X) 0
+# define sqlite3IsOVerflow(X) 0
#endif
/*
@@ -21381,6 +21488,7 @@ SQLITE_PRIVATE int sqlite3ErrorToParser(sqlite3*,int);
SQLITE_PRIVATE void sqlite3Dequote(char*);
SQLITE_PRIVATE void sqlite3DequoteExpr(Expr*);
SQLITE_PRIVATE void sqlite3DequoteToken(Token*);
+SQLITE_PRIVATE void sqlite3DequoteNumber(Parse*, Expr*);
SQLITE_PRIVATE void sqlite3TokenInit(Token*,char*);
SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char*, int);
SQLITE_PRIVATE int sqlite3RunParser(Parse*, const char*);
@@ -21411,7 +21519,7 @@ SQLITE_PRIVATE void sqlite3ExprFunctionUsable(Parse*,const Expr*,const FuncDef*)
SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32);
SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*);
SQLITE_PRIVATE void sqlite3ExprDeleteGeneric(sqlite3*,void*);
-SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse*, Expr*);
+SQLITE_PRIVATE int sqlite3ExprDeferredDelete(Parse*, Expr*);
SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse*, Expr*);
SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*);
SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*);
@@ -21634,12 +21742,10 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3*);
SQLITE_PRIVATE u32 sqlite3IsTrueOrFalse(const char*);
SQLITE_PRIVATE int sqlite3ExprIdToTrueFalse(Expr*);
SQLITE_PRIVATE int sqlite3ExprTruthValue(const Expr*);
-SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*);
-SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*);
+SQLITE_PRIVATE int sqlite3ExprIsConstant(Parse*,Expr*);
SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*, u8);
SQLITE_PRIVATE int sqlite3ExprIsConstantOrGroupBy(Parse*, Expr*, ExprList*);
-SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr*,int);
-SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint(Expr*,const SrcList*,int);
+SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint(Expr*,const SrcList*,int,int);
#ifdef SQLITE_ENABLE_CURSOR_HINTS
SQLITE_PRIVATE int sqlite3ExprContainsSubquery(Expr*);
#endif
@@ -21827,7 +21933,9 @@ SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3*, int, const char*,...);
SQLITE_PRIVATE void sqlite3Error(sqlite3*,int);
SQLITE_PRIVATE void sqlite3ErrorClear(sqlite3*);
SQLITE_PRIVATE void sqlite3SystemError(sqlite3*,int);
+#if !defined(SQLITE_OMIT_BLOB_LITERAL)
SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
+#endif
SQLITE_PRIVATE u8 sqlite3HexToInt(int h);
SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
@@ -22139,7 +22247,7 @@ SQLITE_PRIVATE With *sqlite3WithPush(Parse*, With*, u8);
SQLITE_PRIVATE Upsert *sqlite3UpsertNew(sqlite3*,ExprList*,Expr*,ExprList*,Expr*,Upsert*);
SQLITE_PRIVATE void sqlite3UpsertDelete(sqlite3*,Upsert*);
SQLITE_PRIVATE Upsert *sqlite3UpsertDup(sqlite3*,Upsert*);
-SQLITE_PRIVATE int sqlite3UpsertAnalyzeTarget(Parse*,SrcList*,Upsert*);
+SQLITE_PRIVATE int sqlite3UpsertAnalyzeTarget(Parse*,SrcList*,Upsert*,Upsert*);
SQLITE_PRIVATE void sqlite3UpsertDoUpdate(Parse*,Upsert*,Table*,Index*,int);
SQLITE_PRIVATE Upsert *sqlite3UpsertOfIndex(Upsert*,Index*);
SQLITE_PRIVATE int sqlite3UpsertNextIsIPK(Upsert*);
@@ -22529,6 +22637,9 @@ static const char * const sqlite3azCompileOpt[] = {
"ALLOW_COVERING_INDEX_SCAN=" CTIMEOPT_VAL(SQLITE_ALLOW_COVERING_INDEX_SCAN),
# endif
#endif
+#ifdef SQLITE_ALLOW_ROWID_IN_VIEW
+ "ALLOW_ROWID_IN_VIEW",
+#endif
#ifdef SQLITE_ALLOW_URI_AUTHORITY
"ALLOW_URI_AUTHORITY",
#endif
@@ -23548,6 +23659,9 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = {
#endif
#ifndef SQLITE_UNTESTABLE
0, /* xTestCallback */
+#endif
+#ifdef SQLITE_ALLOW_ROWID_IN_VIEW
+ 0, /* mNoVisibleRowid. 0 == allow rowid-in-view */
#endif
0, /* bLocaltimeFault */
0, /* xAltLocaltime */
@@ -24904,13 +25018,14 @@ struct DateTime {
int tz; /* Timezone offset in minutes */
double s; /* Seconds */
char validJD; /* True (1) if iJD is valid */
- char rawS; /* Raw numeric value stored in s */
char validYMD; /* True (1) if Y,M,D are valid */
char validHMS; /* True (1) if h,m,s are valid */
- char validTZ; /* True (1) if tz is valid */
- char tzSet; /* Timezone was set explicitly */
- char isError; /* An overflow has occurred */
- char useSubsec; /* Display subsecond precision */
+ char nFloor; /* Days to implement "floor" */
+ unsigned rawS : 1; /* Raw numeric value stored in s */
+ unsigned isError : 1; /* An overflow has occurred */
+ unsigned useSubsec : 1; /* Display subsecond precision */
+ unsigned isUtc : 1; /* Time is known to be UTC */
+ unsigned isLocal : 1; /* Time is known to be localtime */
};
@@ -25008,6 +25123,8 @@ static int parseTimezone(const char *zDate, DateTime *p){
sgn = +1;
}else if( c=='Z' || c=='z' ){
zDate++;
+ p->isLocal = 0;
+ p->isUtc = 1;
goto zulu_time;
}else{
return c!=0;
@@ -25020,7 +25137,6 @@ static int parseTimezone(const char *zDate, DateTime *p){
p->tz = sgn*(nMn + nHr*60);
zulu_time:
while( sqlite3Isspace(*zDate) ){ zDate++; }
- p->tzSet = 1;
return *zDate!=0;
}
@@ -25064,7 +25180,6 @@ static int parseHhMmSs(const char *zDate, DateTime *p){
p->m = m;
p->s = s + ms;
if( parseTimezone(zDate, p) ) return 1;
- p->validTZ = (p->tz!=0)?1:0;
return 0;
}
@@ -25111,15 +25226,40 @@ static void computeJD(DateTime *p){
p->validJD = 1;
if( p->validHMS ){
p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000 + 0.5);
- if( p->validTZ ){
+ if( p->tz ){
p->iJD -= p->tz*60000;
p->validYMD = 0;
p->validHMS = 0;
- p->validTZ = 0;
+ p->tz = 0;
+ p->isUtc = 1;
+ p->isLocal = 0;
}
}
}
+/*
+** Given the YYYY-MM-DD information current in p, determine if there
+** is day-of-month overflow and set nFloor to the number of days that
+** would need to be subtracted from the date in order to bring the
+** date back to the end of the month.
+*/
+static void computeFloor(DateTime *p){
+ assert( p->validYMD || p->isError );
+ assert( p->D>=0 && p->D<=31 );
+ assert( p->M>=0 && p->M<=12 );
+ if( p->D<=28 ){
+ p->nFloor = 0;
+ }else if( (1<M) & 0x15aa ){
+ p->nFloor = 0;
+ }else if( p->M!=2 ){
+ p->nFloor = (p->D==31);
+ }else if( p->Y%4!=0 || (p->Y%100==0 && p->Y%400!=0) ){
+ p->nFloor = p->D - 28;
+ }else{
+ p->nFloor = p->D - 29;
+ }
+}
+
/*
** Parse dates of the form
**
@@ -25158,12 +25298,16 @@ static int parseYyyyMmDd(const char *zDate, DateTime *p){
p->Y = neg ? -Y : Y;
p->M = M;
p->D = D;
- if( p->validTZ ){
+ computeFloor(p);
+ if( p->tz ){
computeJD(p);
}
return 0;
}
+
+static void clearYMD_HMS_TZ(DateTime *p); /* Forward declaration */
+
/*
** Set the time to the current time reported by the VFS.
**
@@ -25173,6 +25317,9 @@ static int setDateTimeToCurrent(sqlite3_context *context, DateTime *p){
p->iJD = sqlite3StmtCurrentTime(context);
if( p->iJD>0 ){
p->validJD = 1;
+ p->isUtc = 1;
+ p->isLocal = 0;
+ clearYMD_HMS_TZ(p);
return 0;
}else{
return 1;
@@ -25311,7 +25458,7 @@ static void computeYMD_HMS(DateTime *p){
static void clearYMD_HMS_TZ(DateTime *p){
p->validYMD = 0;
p->validHMS = 0;
- p->validTZ = 0;
+ p->tz = 0;
}
#ifndef SQLITE_OMIT_LOCALTIME
@@ -25443,7 +25590,7 @@ static int toLocaltime(
p->validHMS = 1;
p->validJD = 0;
p->rawS = 0;
- p->validTZ = 0;
+ p->tz = 0;
p->isError = 0;
return SQLITE_OK;
}
@@ -25463,12 +25610,12 @@ static const struct {
float rLimit; /* Maximum NNN value for this transform */
float rXform; /* Constant used for this transform */
} aXformType[] = {
- { 6, "second", 4.6427e+14, 1.0 },
- { 6, "minute", 7.7379e+12, 60.0 },
- { 4, "hour", 1.2897e+11, 3600.0 },
- { 3, "day", 5373485.0, 86400.0 },
- { 5, "month", 176546.0, 2592000.0 },
- { 4, "year", 14713.0, 31536000.0 },
+ /* 0 */ { 6, "second", 4.6427e+14, 1.0 },
+ /* 1 */ { 6, "minute", 7.7379e+12, 60.0 },
+ /* 2 */ { 4, "hour", 1.2897e+11, 3600.0 },
+ /* 3 */ { 3, "day", 5373485.0, 86400.0 },
+ /* 4 */ { 5, "month", 176546.0, 30.0*86400.0 },
+ /* 5 */ { 4, "year", 14713.0, 365.0*86400.0 },
};
/*
@@ -25500,14 +25647,20 @@ static void autoAdjustDate(DateTime *p){
** NNN.NNNN seconds
** NNN months
** NNN years
+** +/-YYYY-MM-DD HH:MM:SS.SSS
+** ceiling
+** floor
** start of month
** start of year
** start of week
** start of day
** weekday N
** unixepoch
+** auto
** localtime
** utc
+** subsec
+** subsecond
**
** Return 0 on success and 1 if there is any kind of error. If the error
** is in a system call (i.e. localtime()), then an error message is written
@@ -25538,6 +25691,37 @@ static int parseModifier(
}
break;
}
+ case 'c': {
+ /*
+ ** ceiling
+ **
+ ** Resolve day-of-month overflow by rolling forward into the next
+ ** month. As this is the default action, this modifier is really
+ ** a no-op that is only included for symmetry. See "floor".
+ */
+ if( sqlite3_stricmp(z, "ceiling")==0 ){
+ computeJD(p);
+ clearYMD_HMS_TZ(p);
+ rc = 0;
+ p->nFloor = 0;
+ }
+ break;
+ }
+ case 'f': {
+ /*
+ ** floor
+ **
+ ** Resolve day-of-month overflow by rolling back to the end of the
+ ** previous month.
+ */
+ if( sqlite3_stricmp(z, "floor")==0 ){
+ computeJD(p);
+ p->iJD -= p->nFloor*86400000;
+ clearYMD_HMS_TZ(p);
+ rc = 0;
+ }
+ break;
+ }
case 'j': {
/*
** julianday
@@ -25564,7 +25748,9 @@ static int parseModifier(
** show local time.
*/
if( sqlite3_stricmp(z, "localtime")==0 && sqlite3NotPureFunc(pCtx) ){
- rc = toLocaltime(p, pCtx);
+ rc = p->isLocal ? SQLITE_OK : toLocaltime(p, pCtx);
+ p->isUtc = 0;
+ p->isLocal = 1;
}
break;
}
@@ -25589,7 +25775,7 @@ static int parseModifier(
}
#ifndef SQLITE_OMIT_LOCALTIME
else if( sqlite3_stricmp(z, "utc")==0 && sqlite3NotPureFunc(pCtx) ){
- if( p->tzSet==0 ){
+ if( p->isUtc==0 ){
i64 iOrigJD; /* Original localtime */
i64 iGuess; /* Guess at the corresponding utc time */
int cnt = 0; /* Safety to prevent infinite loop */
@@ -25612,7 +25798,8 @@ static int parseModifier(
memset(p, 0, sizeof(*p));
p->iJD = iGuess;
p->validJD = 1;
- p->tzSet = 1;
+ p->isUtc = 1;
+ p->isLocal = 0;
}
rc = SQLITE_OK;
}
@@ -25632,7 +25819,7 @@ static int parseModifier(
&& r>=0.0 && r<7.0 && (n=(int)r)==r ){
sqlite3_int64 Z;
computeYMD_HMS(p);
- p->validTZ = 0;
+ p->tz = 0;
p->validJD = 0;
computeJD(p);
Z = ((p->iJD + 129600000)/86400000) % 7;
@@ -25672,7 +25859,7 @@ static int parseModifier(
p->h = p->m = 0;
p->s = 0.0;
p->rawS = 0;
- p->validTZ = 0;
+ p->tz = 0;
p->validJD = 0;
if( sqlite3_stricmp(z,"month")==0 ){
p->D = 1;
@@ -25743,6 +25930,7 @@ static int parseModifier(
x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12;
p->Y += x;
p->M -= x*12;
+ computeFloor(p);
computeJD(p);
p->validHMS = 0;
p->validYMD = 0;
@@ -25789,11 +25977,12 @@ static int parseModifier(
z += n;
while( sqlite3Isspace(*z) ) z++;
n = sqlite3Strlen30(z);
- if( n>10 || n<3 ) break;
+ if( n<3 || n>10 ) break;
if( sqlite3UpperToLower[(u8)z[n-1]]=='s' ) n--;
computeJD(p);
assert( rc==1 );
rRounder = r<0 ? -0.5 : +0.5;
+ p->nFloor = 0;
for(i=0; iM += (int)r;
x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12;
p->Y += x;
p->M -= x*12;
+ computeFloor(p);
p->validJD = 0;
r -= (int)r;
break;
}
case 5: { /* Special processing to add years */
int y = (int)r;
- assert( strcmp(aXformType[i].zName,"year")==0 );
+ assert( strcmp(aXformType[5].zName,"year")==0 );
computeYMD_HMS(p);
+ assert( p->M>=0 && p->M<=12 );
p->Y += y;
+ computeFloor(p);
p->validJD = 0;
r -= (int)r;
break;
@@ -26069,22 +26261,83 @@ static void dateFunc(
}
}
+/*
+** Compute the number of days after the most recent January 1.
+**
+** In other words, compute the zero-based day number for the
+** current year:
+**
+** Jan01 = 0, Jan02 = 1, ..., Jan31 = 30, Feb01 = 31, ...
+** Dec31 = 364 or 365.
+*/
+static int daysAfterJan01(DateTime *pDate){
+ DateTime jan01 = *pDate;
+ assert( jan01.validYMD );
+ assert( jan01.validHMS );
+ assert( pDate->validJD );
+ jan01.validJD = 0;
+ jan01.M = 1;
+ jan01.D = 1;
+ computeJD(&jan01);
+ return (int)((pDate->iJD-jan01.iJD+43200000)/86400000);
+}
+
+/*
+** Return the number of days after the most recent Monday.
+**
+** In other words, return the day of the week according
+** to this code:
+**
+** 0=Monday, 1=Tuesday, 2=Wednesday, ..., 6=Sunday.
+*/
+static int daysAfterMonday(DateTime *pDate){
+ assert( pDate->validJD );
+ return (int)((pDate->iJD+43200000)/86400000) % 7;
+}
+
+/*
+** Return the number of days after the most recent Sunday.
+**
+** In other words, return the day of the week according
+** to this code:
+**
+** 0=Sunday, 1=Monday, 2=Tues, ..., 6=Saturday
+*/
+static int daysAfterSunday(DateTime *pDate){
+ assert( pDate->validJD );
+ return (int)((pDate->iJD+129600000)/86400000) % 7;
+}
+
/*
** strftime( FORMAT, TIMESTRING, MOD, MOD, ...)
**
** Return a string described by FORMAT. Conversions as follows:
**
-** %d day of month
+** %d day of month 01-31
+** %e day of month 1-31
** %f ** fractional seconds SS.SSS
+** %F ISO date. YYYY-MM-DD
+** %G ISO year corresponding to %V 0000-9999.
+** %g 2-digit ISO year corresponding to %V 00-99
** %H hour 00-24
-** %j day of year 000-366
+** %k hour 0-24 (leading zero converted to space)
+** %I hour 01-12
+** %j day of year 001-366
** %J ** julian day number
+** %l hour 1-12 (leading zero converted to space)
** %m month 01-12
** %M minute 00-59
+** %p "am" or "pm"
+** %P "AM" or "PM"
+** %R time as HH:MM
** %s seconds since 1970-01-01
** %S seconds 00-59
-** %w day of week 0-6 Sunday==0
-** %W week of year 00-53
+** %T time as HH:MM:SS
+** %u day of week 1-7 Monday==1, Sunday==7
+** %w day of week 0-6 Sunday==0, Monday==1
+** %U week of year 00-53 (First Sunday is start of week 01)
+** %V week of year 01-53 (First week containing Thursday is week 01)
+** %W week of year 00-53 (First Monday is start of week 01)
** %Y year 0000-9999
** %% %
*/
@@ -26121,7 +26374,7 @@ static void strftimeFunc(
sqlite3_str_appendf(&sRes, cf=='d' ? "%02d" : "%2d", x.D);
break;
}
- case 'f': {
+ case 'f': { /* Fractional seconds. (Non-standard) */
double s = x.s;
if( s>59.999 ) s = 59.999;
sqlite3_str_appendf(&sRes, "%06.3f", s);
@@ -26131,6 +26384,21 @@ static void strftimeFunc(
sqlite3_str_appendf(&sRes, "%04d-%02d-%02d", x.Y, x.M, x.D);
break;
}
+ case 'G': /* Fall thru */
+ case 'g': {
+ DateTime y = x;
+ assert( y.validJD );
+ /* Move y so that it is the Thursday in the same week as x */
+ y.iJD += (3 - daysAfterMonday(&x))*86400000;
+ y.validYMD = 0;
+ computeYMD(&y);
+ if( cf=='g' ){
+ sqlite3_str_appendf(&sRes, "%02d", y.Y%100);
+ }else{
+ sqlite3_str_appendf(&sRes, "%04d", y.Y);
+ }
+ break;
+ }
case 'H':
case 'k': {
sqlite3_str_appendf(&sRes, cf=='H' ? "%02d" : "%2d", x.h);
@@ -26144,25 +26412,11 @@ static void strftimeFunc(
sqlite3_str_appendf(&sRes, cf=='I' ? "%02d" : "%2d", h);
break;
}
- case 'W': /* Fall thru */
- case 'j': {
- int nDay; /* Number of days since 1st day of year */
- DateTime y = x;
- y.validJD = 0;
- y.M = 1;
- y.D = 1;
- computeJD(&y);
- nDay = (int)((x.iJD-y.iJD+43200000)/86400000);
- if( cf=='W' ){
- int wd; /* 0=Monday, 1=Tuesday, ... 6=Sunday */
- wd = (int)(((x.iJD+43200000)/86400000)%7);
- sqlite3_str_appendf(&sRes,"%02d",(nDay+7-wd)/7);
- }else{
- sqlite3_str_appendf(&sRes,"%03d",nDay+1);
- }
+ case 'j': { /* Day of year. Jan01==1, Jan02==2, and so forth */
+ sqlite3_str_appendf(&sRes,"%03d",daysAfterJan01(&x)+1);
break;
}
- case 'J': {
+ case 'J': { /* Julian day number. (Non-standard) */
sqlite3_str_appendf(&sRes,"%.16g",x.iJD/86400000.0);
break;
}
@@ -26205,13 +26459,33 @@ static void strftimeFunc(
sqlite3_str_appendf(&sRes,"%02d:%02d:%02d", x.h, x.m, (int)x.s);
break;
}
- case 'u': /* Fall thru */
- case 'w': {
- char c = (char)(((x.iJD+129600000)/86400000) % 7) + '0';
+ case 'u': /* Day of week. 1 to 7. Monday==1, Sunday==7 */
+ case 'w': { /* Day of week. 0 to 6. Sunday==0, Monday==1 */
+ char c = (char)daysAfterSunday(&x) + '0';
if( c=='0' && cf=='u' ) c = '7';
sqlite3_str_appendchar(&sRes, 1, c);
break;
}
+ case 'U': { /* Week num. 00-53. First Sun of the year is week 01 */
+ sqlite3_str_appendf(&sRes,"%02d",
+ (daysAfterJan01(&x)-daysAfterSunday(&x)+7)/7);
+ break;
+ }
+ case 'V': { /* Week num. 01-53. First week with a Thur is week 01 */
+ DateTime y = x;
+ /* Adjust y so that is the Thursday in the same week as x */
+ assert( y.validJD );
+ y.iJD += (3 - daysAfterMonday(&x))*86400000;
+ y.validYMD = 0;
+ computeYMD(&y);
+ sqlite3_str_appendf(&sRes,"%02d", daysAfterJan01(&y)/7+1);
+ break;
+ }
+ case 'W': { /* Week num. 00-53. First Mon of the year is week 01 */
+ sqlite3_str_appendf(&sRes,"%02d",
+ (daysAfterJan01(&x)-daysAfterMonday(&x)+7)/7);
+ break;
+ }
case 'Y': {
sqlite3_str_appendf(&sRes,"%04d",x.Y);
break;
@@ -26358,9 +26632,7 @@ static void timediffFunc(
d1.iJD = d2.iJD - d1.iJD;
d1.iJD += (u64)1486995408 * (u64)100000;
}
- d1.validYMD = 0;
- d1.validHMS = 0;
- d1.validTZ = 0;
+ clearYMD_HMS_TZ(&d1);
computeYMD_HMS(&d1);
sqlite3StrAccumInit(&sRes, 0, 0, 0, 100);
sqlite3_str_appendf(&sRes, "%c%04d-%02d-%02d %02d:%02d:%06.3f",
@@ -26429,6 +26701,36 @@ static void currentTimeFunc(
}
#endif
+#if !defined(SQLITE_OMIT_DATETIME_FUNCS) && defined(SQLITE_DEBUG)
+/*
+** datedebug(...)
+**
+** This routine returns JSON that describes the internal DateTime object.
+** Used for debugging and testing only. Subject to change.
+*/
+static void datedebugFunc(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ DateTime x;
+ if( isDate(context, argc, argv, &x)==0 ){
+ char *zJson;
+ zJson = sqlite3_mprintf(
+ "{iJD:%lld,Y:%d,M:%d,D:%d,h:%d,m:%d,tz:%d,"
+ "s:%.3f,validJD:%d,validYMS:%d,validHMS:%d,"
+ "nFloor:%d,rawS:%d,isError:%d,useSubsec:%d,"
+ "isUtc:%d,isLocal:%d}",
+ x.iJD, x.Y, x.M, x.D, x.h, x.m, x.tz,
+ x.s, x.validJD, x.validYMD, x.validHMS,
+ x.nFloor, x.rawS, x.isError, x.useSubsec,
+ x.isUtc, x.isLocal);
+ sqlite3_result_text(context, zJson, -1, sqlite3_free);
+ }
+}
+#endif /* !SQLITE_OMIT_DATETIME_FUNCS && SQLITE_DEBUG */
+
+
/*
** This function registered all of the above C functions as SQL
** functions. This should be the only routine in this file with
@@ -26444,6 +26746,9 @@ SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){
PURE_DATE(datetime, -1, 0, 0, datetimeFunc ),
PURE_DATE(strftime, -1, 0, 0, strftimeFunc ),
PURE_DATE(timediff, 2, 0, 0, timediffFunc ),
+#ifdef SQLITE_DEBUG
+ PURE_DATE(datedebug, -1, 0, 0, datedebugFunc ),
+#endif
DFUNCTION(current_time, 0, 0, 0, ctimeFunc ),
DFUNCTION(current_timestamp, 0, 0, 0, ctimestampFunc),
DFUNCTION(current_date, 0, 0, 0, cdateFunc ),
@@ -30859,6 +31164,24 @@ static void sqlite3MallocAlarm(int nByte){
sqlite3_mutex_enter(mem0.mutex);
}
+#ifdef SQLITE_DEBUG
+/*
+** This routine is called whenever an out-of-memory condition is seen,
+** It's only purpose to to serve as a breakpoint for gdb or similar
+** code debuggers when working on out-of-memory conditions, for example
+** caused by PRAGMA hard_heap_limit=N.
+*/
+static SQLITE_NOINLINE void test_oom_breakpoint(u64 n){
+ static u64 nOomFault = 0;
+ nOomFault += n;
+ /* The assert() is never reached in a human lifetime. It is here mostly
+ ** to prevent code optimizers from optimizing out this function. */
+ assert( (nOomFault>>32) < 0xffffffff );
+}
+#else
+# define test_oom_breakpoint(X) /* No-op for production builds */
+#endif
+
/*
** Do a memory allocation with statistics and alarms. Assume the
** lock is already held.
@@ -30885,6 +31208,7 @@ static void mallocWithAlarm(int n, void **pp){
if( mem0.hardLimit ){
nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
if( nUsed >= mem0.hardLimit - nFull ){
+ test_oom_breakpoint(1);
*pp = 0;
return;
}
@@ -31173,6 +31497,7 @@ SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, u64 nBytes){
sqlite3MallocAlarm(nDiff);
if( mem0.hardLimit>0 && nUsed >= mem0.hardLimit - nDiff ){
sqlite3_mutex_leave(mem0.mutex);
+ test_oom_breakpoint(1);
return 0;
}
}
@@ -32039,6 +32364,7 @@ SQLITE_API void sqlite3_str_vappendf(
if( xtype==etFLOAT ){
iRound = -precision;
}else if( xtype==etGENERIC ){
+ if( precision==0 ) precision = 1;
iRound = precision;
}else{
iRound = precision+1;
@@ -32074,13 +32400,14 @@ SQLITE_API void sqlite3_str_vappendf(
}
exp = s.iDP-1;
- if( xtype==etGENERIC && precision>0 ) precision--;
/*
** If the field type is etGENERIC, then convert to either etEXP
** or etFLOAT, as appropriate.
*/
if( xtype==etGENERIC ){
+ assert( precision>0 );
+ precision--;
flag_rtz = !flag_alternateform;
if( exp<-4 || exp>precision ){
xtype = etEXP;
@@ -32396,9 +32723,13 @@ SQLITE_API void sqlite3_str_vappendf(
sqlite3_str_appendall(pAccum, pItem->zAlias);
}else{
Select *pSel = pItem->pSelect;
- assert( pSel!=0 );
+ assert( pSel!=0 ); /* Because of tag-20240424-1 */
if( pSel->selFlags & SF_NestedFrom ){
sqlite3_str_appendf(pAccum, "(join-%u)", pSel->selId);
+ }else if( pSel->selFlags & SF_MultiValue ){
+ assert( !pItem->fg.isTabFunc && !pItem->fg.isIndexedBy );
+ sqlite3_str_appendf(pAccum, "%u-ROW VALUES CLAUSE",
+ pItem->u1.nRow);
}else{
sqlite3_str_appendf(pAccum, "(subquery-%u)", pSel->selId);
}
@@ -33175,8 +33506,10 @@ SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc)
x.printfFlags |= SQLITE_PRINTF_INTERNAL;
sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem);
if( pItem->pTab ){
- sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx",
- pItem->pTab->zName, pItem->pTab->nCol, pItem->pTab, pItem->colUsed);
+ sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx%s",
+ pItem->pTab->zName, pItem->pTab->nCol, pItem->pTab,
+ pItem->colUsed,
+ pItem->fg.rowidUsed ? "+rowid" : "");
}
if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))==(JT_LEFT|JT_RIGHT) ){
sqlite3_str_appendf(&x, " FULL-OUTER-JOIN");
@@ -33216,12 +33549,14 @@ SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc)
sqlite3TreeViewIdList(pView, pItem->u3.pUsing, (--n)>0, "USING");
}
if( pItem->pSelect ){
+ sqlite3TreeViewPush(&pView, i+1nSrc);
if( pItem->pTab ){
Table *pTab = pItem->pTab;
sqlite3TreeViewColumnList(pView, pTab->aCol, pTab->nCol, 1);
}
assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) );
sqlite3TreeViewSelect(pView, pItem->pSelect, (--n)>0);
+ sqlite3TreeViewPop(&pView);
}
if( pItem->fg.isTabFunc ){
sqlite3TreeViewExprList(pView, pItem->u1.pFuncArg, 0, "func-args:");
@@ -33325,7 +33660,7 @@ SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 m
sqlite3TreeViewItem(pView, "LIMIT", (n--)>0);
sqlite3TreeViewExpr(pView, p->pLimit->pLeft, p->pLimit->pRight!=0);
if( p->pLimit->pRight ){
- sqlite3TreeViewItem(pView, "OFFSET", (n--)>0);
+ sqlite3TreeViewItem(pView, "OFFSET", 0);
sqlite3TreeViewExpr(pView, p->pLimit->pRight, 0);
sqlite3TreeViewPop(&pView);
}
@@ -35370,6 +35705,19 @@ SQLITE_PRIVATE int sqlite3IsNaN(double x){
}
#endif /* SQLITE_OMIT_FLOATING_POINT */
+#ifndef SQLITE_OMIT_FLOATING_POINT
+/*
+** Return true if the floating point value is NaN or +Inf or -Inf.
+*/
+SQLITE_PRIVATE int sqlite3IsOverflow(double x){
+ int rc; /* The value return */
+ u64 y;
+ memcpy(&y,&x,sizeof(y));
+ rc = IsOvfl(y);
+ return rc;
+}
+#endif /* SQLITE_OMIT_FLOATING_POINT */
+
/*
** Compute a string length that is limited to what can be stored in
** lower 30 bits of a 32-bit signed integer.
@@ -35613,6 +35961,44 @@ SQLITE_PRIVATE void sqlite3DequoteExpr(Expr *p){
sqlite3Dequote(p->u.zToken);
}
+/*
+** Expression p is a QNUMBER (quoted number). Dequote the value in p->u.zToken
+** and set the type to INTEGER or FLOAT. "Quoted" integers or floats are those
+** that contain '_' characters that must be removed before further processing.
+*/
+SQLITE_PRIVATE void sqlite3DequoteNumber(Parse *pParse, Expr *p){
+ assert( p!=0 || pParse->db->mallocFailed );
+ if( p ){
+ const char *pIn = p->u.zToken;
+ char *pOut = p->u.zToken;
+ int bHex = (pIn[0]=='0' && (pIn[1]=='x' || pIn[1]=='X'));
+ int iValue;
+ assert( p->op==TK_QNUMBER );
+ p->op = TK_INTEGER;
+ do {
+ if( *pIn!=SQLITE_DIGIT_SEPARATOR ){
+ *pOut++ = *pIn;
+ if( *pIn=='e' || *pIn=='E' || *pIn=='.' ) p->op = TK_FLOAT;
+ }else{
+ if( (bHex==0 && (!sqlite3Isdigit(pIn[-1]) || !sqlite3Isdigit(pIn[1])))
+ || (bHex==1 && (!sqlite3Isxdigit(pIn[-1]) || !sqlite3Isxdigit(pIn[1])))
+ ){
+ sqlite3ErrorMsg(pParse, "unrecognized token: \"%s\"", p->u.zToken);
+ }
+ }
+ }while( *pIn++ );
+ if( bHex ) p->op = TK_INTEGER;
+
+ /* tag-20240227-a: If after dequoting, the number is an integer that
+ ** fits in 32 bits, then it must be converted into EP_IntValue. Other
+ ** parts of the code expect this. See also tag-20240227-b. */
+ if( p->op==TK_INTEGER && sqlite3GetInt32(p->u.zToken, &iValue) ){
+ p->u.iValue = iValue;
+ p->flags |= EP_IntValue;
+ }
+ }
+}
+
/*
** If the input token p is quoted, try to adjust the token to remove
** the quotes. This is not always possible:
@@ -35929,6 +36315,9 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en
u64 s2;
rr[0] = (double)s;
s2 = (u64)rr[0];
+#if defined(_MSC_VER) && _MSC_VER<1700
+ if( s2==0x8000000000000000LL ){ s2 = 2*(u64)(0.5*rr[0]); }
+#endif
rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s);
if( e>0 ){
while( e>=100 ){
@@ -36371,7 +36760,7 @@ SQLITE_PRIVATE void sqlite3FpDecode(FpDecode *p, double r, int iRound, int mxRou
assert( p->n>0 );
assert( p->nzBuf) );
p->iDP = p->n + exp;
- if( iRound<0 ){
+ if( iRound<=0 ){
iRound = p->iDP - iRound;
if( iRound==0 && p->zBuf[i+1]>='5' ){
iRound = 1;
@@ -37549,7 +37938,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 30 */ "SeekRowid" OpHelp("intkey=r[P3]"),
/* 31 */ "NotExists" OpHelp("intkey=r[P3]"),
/* 32 */ "Last" OpHelp(""),
- /* 33 */ "IfSmaller" OpHelp(""),
+ /* 33 */ "IfSizeBetween" OpHelp(""),
/* 34 */ "SorterSort" OpHelp(""),
/* 35 */ "Sort" OpHelp(""),
/* 36 */ "Rewind" OpHelp(""),
@@ -37594,7 +37983,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 75 */ "Null" OpHelp("r[P2..P3]=NULL"),
/* 76 */ "SoftNull" OpHelp("r[P1]=NULL"),
/* 77 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"),
- /* 78 */ "Variable" OpHelp("r[P2]=parameter(P1,P4)"),
+ /* 78 */ "Variable" OpHelp("r[P2]=parameter(P1)"),
/* 79 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"),
/* 80 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"),
/* 81 */ "SCopy" OpHelp("r[P2]=r[P1]"),
@@ -39996,8 +40385,12 @@ static int unixLogErrorAtLine(
** available, the error message will often be an empty string. Not a
** huge problem. Incorrectly concluding that the GNU version is available
** could lead to a segfault though.
+ **
+ ** Forum post 3f13857fa4062301 reports that the Android SDK may use
+ ** int-type return, depending on its version.
*/
-#if defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)
+#if (defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)) \
+ && !defined(ANDROID) && !defined(__ANDROID__)
zErr =
# endif
strerror_r(iErrno, aErr, sizeof(aErr)-1);
@@ -45095,12 +45488,19 @@ static int unixOpen(
rc = SQLITE_READONLY_DIRECTORY;
}else if( errno!=EISDIR && isReadWrite ){
/* Failed to open the file for read/write access. Try read-only. */
+ UnixUnusedFd *pReadonly = 0;
flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
openFlags &= ~(O_RDWR|O_CREAT);
flags |= SQLITE_OPEN_READONLY;
openFlags |= O_RDONLY;
isReadonly = 1;
- fd = robust_open(zName, openFlags, openMode);
+ pReadonly = findReusableFd(zName, flags);
+ if( pReadonly ){
+ fd = pReadonly->fd;
+ sqlite3_free(pReadonly);
+ }else{
+ fd = robust_open(zName, openFlags, openMode);
+ }
}
}
if( fd<0 ){
@@ -53996,6 +54396,14 @@ SQLITE_API unsigned char *sqlite3_serialize(
pOut = 0;
}else{
sz = sqlite3_column_int64(pStmt, 0)*szPage;
+ if( sz==0 ){
+ sqlite3_reset(pStmt);
+ sqlite3_exec(db, "BEGIN IMMEDIATE; COMMIT;", 0, 0, 0);
+ rc = sqlite3_step(pStmt);
+ if( rc==SQLITE_ROW ){
+ sz = sqlite3_column_int64(pStmt, 0)*szPage;
+ }
+ }
if( piSize ) *piSize = sz;
if( mFlags & SQLITE_SERIALIZE_NOCOPY ){
pOut = 0;
@@ -64689,7 +65097,7 @@ SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager *pPager){
** This will be either the rollback journal or the WAL file.
*/
SQLITE_PRIVATE sqlite3_file *sqlite3PagerJrnlFile(Pager *pPager){
-#if SQLITE_OMIT_WAL
+#ifdef SQLITE_OMIT_WAL
return pPager->jfd;
#else
return pagerUseWal(pPager) ? pPager->wal->methods.xFile(pPager->wal->pData) : pPager->jfd;
@@ -70953,6 +71361,7 @@ struct IntegrityCk {
StrAccum errMsg; /* Accumulate the error message text here */
u32 *heap; /* Min-heap used for analyzing cell coverage */
sqlite3 *db; /* Database connection running the check */
+ i64 nRow; /* Number of rows visited in current tree */
};
/*
@@ -71427,8 +71836,47 @@ int corruptPageError(int lineno, MemPage *p){
# define SQLITE_CORRUPT_PAGE(pMemPage) SQLITE_CORRUPT_PGNO(pMemPage->pgno)
#endif
+/* Default value for SHARED_LOCK_TRACE macro if shared-cache is disabled
+** or if the lock tracking is disabled. This is always the value for
+** release builds.
+*/
+#define SHARED_LOCK_TRACE(X,MSG,TAB,TYPE) /*no-op*/
+
#ifndef SQLITE_OMIT_SHARED_CACHE
+#if 0
+/* ^---- Change to 1 and recompile to enable shared-lock tracing
+** for debugging purposes.
+**
+** Print all shared-cache locks on a BtShared. Debugging use only.
+*/
+static void sharedLockTrace(
+ BtShared *pBt,
+ const char *zMsg,
+ int iRoot,
+ int eLockType
+){
+ BtLock *pLock;
+ if( iRoot>0 ){
+ printf("%s-%p %u%s:", zMsg, pBt, iRoot, eLockType==READ_LOCK?"R":"W");
+ }else{
+ printf("%s-%p:", zMsg, pBt);
+ }
+ for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){
+ printf(" %p/%u%s", pLock->pBtree, pLock->iTable,
+ pLock->eLock==READ_LOCK ? "R" : "W");
+ while( pLock->pNext && pLock->pBtree==pLock->pNext->pBtree ){
+ pLock = pLock->pNext;
+ printf(",%u%s", pLock->iTable, pLock->eLock==READ_LOCK ? "R" : "W");
+ }
+ }
+ printf("\n");
+ fflush(stdout);
+}
+#undef SHARED_LOCK_TRACE
+#define SHARED_LOCK_TRACE(X,MSG,TAB,TYPE) sharedLockTrace(X,MSG,TAB,TYPE)
+#endif /* Shared-lock tracing */
+
#ifdef SQLITE_DEBUG
/*
**** This function is only used as part of an assert() statement. ***
@@ -71505,6 +71953,8 @@ static int hasSharedCacheTableLock(
iTab = iRoot;
}
+ SHARED_LOCK_TRACE(pBtree->pBt,"hasLock",iRoot,eLockType);
+
/* Search for the required lock. Either a write-lock on root-page iTab, a
** write-lock on the schema table, or (if the client is reading) a
** read-lock on iTab will suffice. Return 1 if any of these are found. */
@@ -71638,6 +72088,8 @@ static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){
BtLock *pLock = 0;
BtLock *pIter;
+ SHARED_LOCK_TRACE(pBt,"setLock", iTable, eLock);
+
assert( sqlite3BtreeHoldsMutex(p) );
assert( eLock==READ_LOCK || eLock==WRITE_LOCK );
assert( p->db!=0 );
@@ -71705,6 +72157,8 @@ static void clearAllSharedCacheTableLocks(Btree *p){
assert( p->sharable || 0==*ppIter );
assert( p->inTrans>0 );
+ SHARED_LOCK_TRACE(pBt, "clearAllLocks", 0, 0);
+
while( *ppIter ){
BtLock *pLock = *ppIter;
assert( (pBt->btsFlags & BTS_EXCLUSIVE)==0 || pBt->pWriter==pLock->pBtree );
@@ -71743,6 +72197,9 @@ static void clearAllSharedCacheTableLocks(Btree *p){
*/
static void downgradeAllSharedCacheTableLocks(Btree *p){
BtShared *pBt = p->pBt;
+
+ SHARED_LOCK_TRACE(pBt, "downgradeLocks", 0, 0);
+
if( pBt->pWriter==p ){
BtLock *pLock;
pBt->pWriter = 0;
@@ -76357,9 +76814,12 @@ static int accessPayload(
if( pCur->aOverflow==0
|| nOvfl*(int)sizeof(Pgno) > sqlite3MallocSize(pCur->aOverflow)
){
- Pgno *aNew = (Pgno*)sqlite3Realloc(
- pCur->aOverflow, nOvfl*2*sizeof(Pgno)
- );
+ Pgno *aNew;
+ if( sqlite3FaultSim(413) ){
+ aNew = 0;
+ }else{
+ aNew = (Pgno*)sqlite3Realloc(pCur->aOverflow, nOvfl*2*sizeof(Pgno));
+ }
if( aNew==0 ){
return SQLITE_NOMEM_BKPT;
}else{
@@ -76369,6 +76829,12 @@ static int accessPayload(
memset(pCur->aOverflow, 0, nOvfl*sizeof(Pgno));
pCur->curFlags |= BTCF_ValidOvfl;
}else{
+ /* Sanity check the validity of the overflow page cache */
+ assert( pCur->aOverflow[0]==nextPage
+ || pCur->aOverflow[0]==0
+ || CORRUPT_DB );
+ assert( pCur->aOverflow[0]!=0 || pCur->aOverflow[offset/ovflSize]==0 );
+
/* If the overflow page-list cache has been allocated and the
** entry for the first required overflow page is valid, skip
** directly to it.
@@ -76850,6 +77316,23 @@ SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
return rc;
}
+#ifdef SQLITE_DEBUG
+/* The cursors is CURSOR_VALID and has BTCF_AtLast set. Verify that
+** this flags are true for a consistent database.
+**
+** This routine is is called from within assert() statements only.
+** It is an internal verification routine and does not appear in production
+** builds.
+*/
+static int cursorIsAtLastEntry(BtCursor *pCur){
+ int ii;
+ for(ii=0; iiiPage; ii++){
+ if( pCur->aiIdx[ii]!=pCur->apPage[ii]->nCell ) return 0;
+ }
+ return pCur->ix==pCur->pPage->nCell-1 && pCur->pPage->leaf!=0;
+}
+#endif
+
/* Move the cursor to the last entry in the table. Return SQLITE_OK
** on success. Set *pRes to 0 if the cursor actually points to something
** or set *pRes to 1 if the table is empty.
@@ -76878,18 +77361,7 @@ SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
/* If the cursor already points to the last entry, this is a no-op. */
if( CURSOR_VALID==pCur->eState && (pCur->curFlags & BTCF_AtLast)!=0 ){
-#ifdef SQLITE_DEBUG
- /* This block serves to assert() that the cursor really does point
- ** to the last entry in the b-tree. */
- int ii;
- for(ii=0; iiiPage; ii++){
- assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell );
- }
- assert( pCur->ix==pCur->pPage->nCell-1 || CORRUPT_DB );
- testcase( pCur->ix!=pCur->pPage->nCell-1 );
- /* ^-- dbsqlfuzz b92b72e4de80b5140c30ab71372ca719b8feb618 */
- assert( pCur->pPage->leaf );
-#endif
+ assert( cursorIsAtLastEntry(pCur) || CORRUPT_DB );
*pRes = 0;
return SQLITE_OK;
}
@@ -76942,6 +77414,7 @@ SQLITE_PRIVATE int sqlite3BtreeTableMoveto(
}
if( pCur->info.nKeycurFlags & BTCF_AtLast)!=0 ){
+ assert( cursorIsAtLastEntry(pCur) || CORRUPT_DB );
*pRes = -1;
return SQLITE_OK;
}
@@ -77408,10 +77881,10 @@ SQLITE_PRIVATE i64 sqlite3BtreeRowCountEst(BtCursor *pCur){
assert( cursorOwnsBtShared(pCur) );
assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
- /* Currently this interface is only called by the OP_IfSmaller
- ** opcode, and it that case the cursor will always be valid and
- ** will always point to a leaf node. */
- if( NEVER(pCur->eState!=CURSOR_VALID) ) return -1;
+ /* Currently this interface is only called by the OP_IfSizeBetween
+ ** opcode and the OP_Count opcode with P3=1. In either case,
+ ** the cursor will always be valid unless the btree is empty. */
+ if( pCur->eState!=CURSOR_VALID ) return 0;
if( NEVER(pCur->pPage->leaf==0) ) return -1;
n = pCur->pPage->nCell;
@@ -78233,7 +78706,10 @@ static int fillInCell(
n = nHeader + nPayload;
testcase( n==3 );
testcase( n==4 );
- if( n<4 ) n = 4;
+ if( n<4 ){
+ n = 4;
+ pPayload[nPayload] = 0;
+ }
*pnSize = n;
assert( nSrc<=nPayload );
testcase( nSrcaData[0]!=apOld[0]->aData[0] ){
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pOld);
goto balance_cleanup;
}
@@ -79563,7 +80039,7 @@ static int balance_nonroot(
memset(&b.szCell[b.nCell], 0, sizeof(b.szCell[0])*(limit+pOld->nOverflow));
if( pOld->nOverflow>0 ){
if( NEVER(limitaiOvfl[0]) ){
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pOld);
goto balance_cleanup;
}
limit = pOld->aiOvfl[0];
@@ -80206,7 +80682,7 @@ static int anotherValidCursor(BtCursor *pCur){
&& pOther->eState==CURSOR_VALID
&& pOther->pPage==pCur->pPage
){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pCur->pPage);
}
}
return SQLITE_OK;
@@ -80266,7 +80742,7 @@ static int balance(BtCursor *pCur){
/* The page being written is not a root page, and there is currently
** more than one reference to it. This only happens if the page is one
** of its own ancestor pages. Corruption. */
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pPage);
}else{
MemPage * const pParent = pCur->apPage[iPage-1];
int const iIdx = pCur->aiIdx[iPage-1];
@@ -80430,7 +80906,7 @@ static SQLITE_NOINLINE int btreeOverwriteOverflowCell(
rc = btreeGetPage(pBt, ovflPgno, &pPage, 0);
if( rc ) return rc;
if( sqlite3PagerPageRefcount(pPage->pDbPage)!=1 || pPage->isInit ){
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pPage);
}else{
if( iOffset+ovflPageSize<(u32)nTotal ){
ovflPgno = get4byte(pPage->aData);
@@ -80458,7 +80934,7 @@ static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){
if( pCur->info.pPayload + pCur->info.nLocal > pPage->aDataEnd
|| pCur->info.pPayload < pPage->aData + pPage->cellOffset
){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
if( pCur->info.nLocal==nTotal ){
/* The entire cell is local */
@@ -80539,7 +81015,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
** Which can only happen if the SQLITE_NoSchemaError flag was set when
** the schema was loaded. This cannot be asserted though, as a user might
** set the flag, load the schema, and then unset the flag. */
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PGNO(pCur->pgnoRoot);
}
}
@@ -80662,7 +81138,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
if( pPage->nFree<0 ){
if( NEVER(pCur->eState>CURSOR_INVALID) ){
/* ^^^^^--- due to the moveToRoot() call above */
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pPage);
}else{
rc = btreeComputeFreeSpace(pPage);
}
@@ -80679,7 +81155,10 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
if( flags & BTREE_PREFORMAT ){
rc = SQLITE_OK;
szNew = p->pBt->nPreformatSize;
- if( szNew<4 ) szNew = 4;
+ if( szNew<4 ){
+ szNew = 4;
+ newCell[3] = 0;
+ }
if( ISAUTOVACUUM(p->pBt) && szNew>pPage->maxLocal ){
CellInfo info;
pPage->xParseCell(pPage, newCell, &info);
@@ -80701,7 +81180,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
CellInfo info;
assert( idx>=0 );
if( idx>=pPage->nCell ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
rc = sqlite3PagerWrite(pPage->pDbPage);
if( rc ){
@@ -80728,10 +81207,10 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
** necessary to add the PTRMAP_OVERFLOW1 pointer-map entry. */
assert( rc==SQLITE_OK ); /* clearCell never fails when nLocal==nPayload */
if( oldCell < pPage->aData+pPage->hdrOffset+10 ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
if( oldCell+szNew > pPage->aDataEnd ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
memcpy(oldCell, newCell, szNew);
return SQLITE_OK;
@@ -80741,7 +81220,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
}else if( loc<0 && pPage->nCell>0 ){
assert( pPage->leaf );
idx = ++pCur->ix;
- pCur->curFlags &= ~BTCF_ValidNKey;
+ pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
}else{
assert( pPage->leaf );
}
@@ -80771,7 +81250,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
*/
if( pPage->nOverflow ){
assert( rc==SQLITE_OK );
- pCur->curFlags &= ~(BTCF_ValidNKey);
+ pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
rc = balance(pCur);
/* Must make sure nOverflow is reset to zero even if the balance()
@@ -80833,7 +81312,7 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64
nIn = pSrc->info.nLocal;
aIn = pSrc->info.pPayload;
if( aIn+nIn>pSrc->pPage->aDataEnd ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pSrc->pPage);
}
nRem = pSrc->info.nPayload;
if( nIn==nRem && nInpPage->maxLocal ){
@@ -80858,7 +81337,7 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64
if( nRem>nIn ){
if( aIn+nIn+4>pSrc->pPage->aDataEnd ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pSrc->pPage);
}
ovflIn = get4byte(&pSrc->info.pPayload[nIn]);
}
@@ -80954,7 +81433,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
assert( rc!=SQLITE_OK || CORRUPT_DB || pCur->eState==CURSOR_VALID );
if( rc || pCur->eState!=CURSOR_VALID ) return rc;
}else{
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PGNO(pCur->pgnoRoot);
}
}
assert( pCur->eState==CURSOR_VALID );
@@ -80963,14 +81442,14 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
iCellIdx = pCur->ix;
pPage = pCur->pPage;
if( pPage->nCell<=iCellIdx ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
pCell = findCell(pPage, iCellIdx);
if( pPage->nFree<0 && btreeComputeFreeSpace(pPage) ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
if( pCell<&pPage->aCellIdx[pPage->nCell] ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PAGE(pPage);
}
/* If the BTREE_SAVEPOSITION bit is on, then the cursor position must
@@ -81061,7 +81540,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
n = pCur->pPage->pgno;
}
pCell = findCell(pLeaf, pLeaf->nCell-1);
- if( pCell<&pLeaf->aData[4] ) return SQLITE_CORRUPT_BKPT;
+ if( pCell<&pLeaf->aData[4] ) return SQLITE_CORRUPT_PAGE(pLeaf);
nCell = pLeaf->xCellSize(pLeaf, pCell);
assert( MX_CELL_SIZE(pBt) >= nCell );
pTmp = pBt->pTmpSpace;
@@ -81177,7 +81656,7 @@ static int btreeCreateTable(Btree *p, Pgno *piTable, int createTabFlags){
*/
sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &pgnoRoot);
if( pgnoRoot>btreePagecount(pBt) ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PGNO(pgnoRoot);
}
pgnoRoot++;
@@ -81225,7 +81704,7 @@ static int btreeCreateTable(Btree *p, Pgno *piTable, int createTabFlags){
}
rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage);
if( eType==PTRMAP_ROOTPAGE || eType==PTRMAP_FREEPAGE ){
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PGNO(pgnoRoot);
}
if( rc!=SQLITE_OK ){
releasePage(pRoot);
@@ -81315,14 +81794,14 @@ static int clearDatabasePage(
assert( sqlite3_mutex_held(pBt->mutex) );
if( pgno>btreePagecount(pBt) ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PGNO(pgno);
}
rc = getAndInitPage(pBt, pgno, &pPage, 0);
if( rc ) return rc;
if( (pBt->openFlags & BTREE_SINGLE)==0
&& sqlite3PagerPageRefcount(pPage->pDbPage) != (1 + (pgno==1))
){
- rc = SQLITE_CORRUPT_BKPT;
+ rc = SQLITE_CORRUPT_PAGE(pPage);
goto cleardatabasepage_out;
}
hdr = pPage->hdrOffset;
@@ -81426,7 +81905,7 @@ static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){
assert( p->inTrans==TRANS_WRITE );
assert( iTable>=2 );
if( iTable>btreePagecount(pBt) ){
- return SQLITE_CORRUPT_BKPT;
+ return SQLITE_CORRUPT_PGNO(iTable);
}
rc = sqlite3BtreeClearTable(p, iTable, 0);
@@ -82023,6 +82502,9 @@ static int checkTreePage(
** number of cells on the page. */
nCell = get2byte(&data[hdr+3]);
assert( pPage->nCell==nCell );
+ if( pPage->leaf || pPage->intKey==0 ){
+ pCheck->nRow += nCell;
+ }
/* EVIDENCE-OF: R-23882-45353 The cell pointer array of a b-tree page
** immediately follows the b-tree page header. */
@@ -82134,6 +82616,7 @@ static int checkTreePage(
btreeHeapInsert(heap, (pc<<16)|(pc+size-1));
}
}
+ assert( heap!=0 );
/* Add the freeblocks to the min-heap
**
** EVIDENCE-OF: R-20690-50594 The second field of the b-tree page header
@@ -82233,6 +82716,7 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck(
sqlite3 *db, /* Database connection that is running the check */
Btree *p, /* The btree to be checked */
Pgno *aRoot, /* An array of root pages numbers for individual trees */
+ Mem *aCnt, /* Memory cells to write counts for each tree to */
int nRoot, /* Number of entries in aRoot[] */
int mxErr, /* Stop reporting errors after this many */
int *pnErr, /* OUT: Write number of errors seen to this variable */
@@ -82246,7 +82730,9 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck(
int bPartial = 0; /* True if not checking all btrees */
int bCkFreelist = 1; /* True to scan the freelist */
VVA_ONLY( int nRef );
+
assert( nRoot>0 );
+ assert( aCnt!=0 );
/* aRoot[0]==0 means this is a partial check */
if( aRoot[0]==0 ){
@@ -82319,15 +82805,18 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck(
testcase( pBt->db->flags & SQLITE_CellSizeCk );
pBt->db->flags &= ~(u64)SQLITE_CellSizeCk;
for(i=0; (int)iautoVacuum && aRoot[i]>1 && !bPartial ){
- checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0);
- }
+ if( pBt->autoVacuum && aRoot[i]>1 && !bPartial ){
+ checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0);
+ }
#endif
- sCheck.v0 = aRoot[i];
- checkTreePage(&sCheck, aRoot[i], ¬Used, LARGEST_INT64);
+ sCheck.v0 = aRoot[i];
+ checkTreePage(&sCheck, aRoot[i], ¬Used, LARGEST_INT64);
+ }
+ sqlite3MemSetArrayInt64(aCnt, i, sCheck.nRow);
}
pBt->db->flags = savedDbFlags;
@@ -84382,6 +84871,13 @@ SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
}
}
+/*
+** Set the iIdx'th entry of array aMem[] to contain integer value val.
+*/
+SQLITE_PRIVATE void sqlite3MemSetArrayInt64(sqlite3_value *aMem, int iIdx, i64 val){
+ sqlite3VdbeMemSetInt64(&aMem[iIdx], val);
+}
+
/* A no-op destructor */
SQLITE_PRIVATE void sqlite3NoopDestructor(void *p){ UNUSED_PARAMETER(p); }
@@ -85070,14 +85566,20 @@ static int valueFromExpr(
}
/* Handle negative integers in a single step. This is needed in the
- ** case when the value is -9223372036854775808.
- */
- if( op==TK_UMINUS
- && (pExpr->pLeft->op==TK_INTEGER || pExpr->pLeft->op==TK_FLOAT) ){
- pExpr = pExpr->pLeft;
- op = pExpr->op;
- negInt = -1;
- zNeg = "-";
+ ** case when the value is -9223372036854775808. Except - do not do this
+ ** for hexadecimal literals. */
+ if( op==TK_UMINUS ){
+ Expr *pLeft = pExpr->pLeft;
+ if( (pLeft->op==TK_INTEGER || pLeft->op==TK_FLOAT) ){
+ if( ExprHasProperty(pLeft, EP_IntValue)
+ || pLeft->u.zToken[0]!='0' || (pLeft->u.zToken[1] & ~0x20)!='X'
+ ){
+ pExpr = pLeft;
+ op = pExpr->op;
+ negInt = -1;
+ zNeg = "-";
+ }
+ }
}
if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){
@@ -85086,12 +85588,26 @@ static int valueFromExpr(
if( ExprHasProperty(pExpr, EP_IntValue) ){
sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue*negInt);
}else{
- zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
- if( zVal==0 ) goto no_mem;
- sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
+ i64 iVal;
+ if( op==TK_INTEGER && 0==sqlite3DecOrHexToI64(pExpr->u.zToken, &iVal) ){
+ sqlite3VdbeMemSetInt64(pVal, iVal*negInt);
+ }else{
+ zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
+ if( zVal==0 ) goto no_mem;
+ sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
+ }
}
- if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_BLOB ){
- sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
+ if( affinity==SQLITE_AFF_BLOB ){
+ if( op==TK_FLOAT ){
+ assert( pVal && pVal->z && pVal->flags==(MEM_Str|MEM_Term) );
+ sqlite3AtoF(pVal->z, &pVal->u.r, pVal->n, SQLITE_UTF8);
+ pVal->flags = MEM_Real;
+ }else if( op==TK_INTEGER ){
+ /* This case is required by -9223372036854775808 and other strings
+ ** that look like integers but cannot be handled by the
+ ** sqlite3DecOrHexToI64() call above. */
+ sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
+ }
}else{
sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
}
@@ -85361,17 +85877,17 @@ SQLITE_PRIVATE int sqlite3Stat4Column(
sqlite3_value **ppVal /* OUT: Extracted value */
){
u32 t = 0; /* a column type code */
- int nHdr; /* Size of the header in the record */
- int iHdr; /* Next unread header byte */
- int iField; /* Next unread data byte */
- int szField = 0; /* Size of the current data field */
+ u32 nHdr; /* Size of the header in the record */
+ u32 iHdr; /* Next unread header byte */
+ i64 iField; /* Next unread data byte */
+ u32 szField = 0; /* Size of the current data field */
int i; /* Column index */
u8 *a = (u8*)pRec; /* Typecast byte array */
Mem *pMem = *ppVal; /* Write result into this Mem object */
assert( iCol>0 );
iHdr = getVarint32(a, nHdr);
- if( nHdr>nRec || iHdr>=nHdr ) return SQLITE_CORRUPT_BKPT;
+ if( nHdr>(u32)nRec || iHdr>=nHdr ) return SQLITE_CORRUPT_BKPT;
iField = nHdr;
for(i=0; i<=iCol; i++){
iHdr += getVarint32(&a[iHdr], t);
@@ -86869,6 +87385,15 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
assert( aLabel!=0 ); /* True because of tag-20230419-1 */
pOp->p2 = aLabel[ADDR(pOp->p2)];
}
+
+ /* OPFLG_JUMP opcodes never have P2==0, though OPFLG_JUMP0 opcodes
+ ** might */
+ assert( pOp->p2>0
+ || (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP0)!=0 );
+
+ /* Jumps never go off the end of the bytecode array */
+ assert( pOp->p2nOp
+ || (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)==0 );
break;
}
}
@@ -89298,7 +89823,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){
/* Check for immediate foreign key violations. */
if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){
- sqlite3VdbeCheckFk(p, 0);
+ (void)sqlite3VdbeCheckFk(p, 0);
}
/* If the auto-commit flag is set and this is the only active writer
@@ -90013,6 +90538,23 @@ static void serialGet(
pMem->flags = IsNaN(x) ? MEM_Null : MEM_Real;
}
}
+static int serialGet7(
+ const unsigned char *buf, /* Buffer to deserialize from */
+ Mem *pMem /* Memory cell to write value into */
+){
+ u64 x = FOUR_BYTE_UINT(buf);
+ u32 y = FOUR_BYTE_UINT(buf+4);
+ x = (x<<32) + y;
+ assert( sizeof(x)==8 && sizeof(pMem->u.r)==8 );
+ swapMixedEndianFloat(x);
+ memcpy(&pMem->u.r, &x, sizeof(x));
+ if( IsNaN(x) ){
+ pMem->flags = MEM_Null;
+ return 1;
+ }
+ pMem->flags = MEM_Real;
+ return 0;
+}
SQLITE_PRIVATE void sqlite3VdbeSerialGet(
const unsigned char *buf, /* Buffer to deserialize from */
u32 serial_type, /* Serial type to deserialize */
@@ -90452,17 +90994,15 @@ SQLITE_PRIVATE int sqlite3IntFloatCompare(i64 i, double r){
return (xr);
}else{
i64 y;
- double s;
if( r<-9223372036854775808.0 ) return +1;
if( r>=9223372036854775808.0 ) return -1;
y = (i64)r;
if( iy ) return +1;
- s = (double)i;
- testcase( doubleLt(s,r) );
- testcase( doubleLt(r,s) );
- testcase( doubleEq(r,s) );
- return (sr);
+ testcase( doubleLt(((double)i),r) );
+ testcase( doubleLt(r,((double)i)) );
+ testcase( doubleEq(r,((double)i)) );
+ return (((double)i)r);
}
}
@@ -90692,7 +91232,7 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip(
}else if( serial_type==0 ){
rc = -1;
}else if( serial_type==7 ){
- sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1);
+ serialGet7(&aKey1[d1], &mem1);
rc = -sqlite3IntFloatCompare(pRhs->u.i, mem1.u.r);
}else{
i64 lhs = vdbeRecordDecodeInt(serial_type, &aKey1[d1]);
@@ -90717,14 +91257,18 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip(
}else if( serial_type==0 ){
rc = -1;
}else{
- sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1);
if( serial_type==7 ){
- if( mem1.u.ru.r ){
+ if( serialGet7(&aKey1[d1], &mem1) ){
+ rc = -1; /* mem1 is a NaN */
+ }else if( mem1.u.ru.r ){
rc = -1;
}else if( mem1.u.r>pRhs->u.r ){
rc = +1;
+ }else{
+ assert( rc==0 );
}
}else{
+ sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1);
rc = sqlite3IntFloatCompare(mem1.u.i, pRhs->u.r);
}
}
@@ -90794,7 +91338,14 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip(
/* RHS is null */
else{
serial_type = aKey1[idx1];
- rc = (serial_type!=0 && serial_type!=10);
+ if( serial_type==0
+ || serial_type==10
+ || (serial_type==7 && serialGet7(&aKey1[d1], &mem1)!=0)
+ ){
+ assert( rc==0 );
+ }else{
+ rc = 1;
+ }
}
if( rc!=0 ){
@@ -91254,7 +91805,8 @@ SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe *v, int iVar, u8 aff
assert( iVar>0 );
if( v ){
Mem *pMem = &v->aVar[iVar-1];
- assert( (v->db->flags & SQLITE_EnableQPSG)==0 );
+ assert( (v->db->flags & SQLITE_EnableQPSG)==0
+ || (v->db->mDbFlags & DBFLAG_InternalFunc)!=0 );
if( 0==(pMem->flags & MEM_Null) ){
sqlite3_value *pRet = sqlite3ValueNew(v->db);
if( pRet ){
@@ -91274,7 +91826,8 @@ SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe *v, int iVar, u8 aff
*/
SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){
assert( iVar>0 );
- assert( (v->db->flags & SQLITE_EnableQPSG)==0 );
+ assert( (v->db->flags & SQLITE_EnableQPSG)==0
+ || (v->db->mDbFlags & DBFLAG_InternalFunc)!=0 );
if( iVar>=32 ){
v->expmask |= 0x80000000;
}else{
@@ -93880,7 +94433,6 @@ SQLITE_API int sqlite3_stmt_scanstatus_v2(
}
if( flags & SQLITE_SCANSTAT_COMPLEX ){
idx = iScan;
- pScan = &p->aScan[idx];
}else{
/* If the COMPLEX flag is clear, then this function must ignore any
** ScanStatus structures with ScanStatus.addrLoop set to 0. */
@@ -93893,6 +94445,8 @@ SQLITE_API int sqlite3_stmt_scanstatus_v2(
}
}
if( idx>=p->nScan ) return 1;
+ assert( pScan==0 || pScan==&p->aScan[idx] );
+ pScan = &p->aScan[idx];
switch( iScanStatusOp ){
case SQLITE_SCANSTAT_NLOOP: {
@@ -95370,7 +95924,7 @@ case OP_Return: { /* in1 */
**
** See also: EndCoroutine
*/
-case OP_InitCoroutine: { /* jump */
+case OP_InitCoroutine: { /* jump0 */
assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) );
assert( pOp->p2>=0 && pOp->p2nOp );
assert( pOp->p3>=0 && pOp->p3nOp );
@@ -95393,7 +95947,9 @@ case OP_InitCoroutine: { /* jump */
**
** The instruction at the address in register P1 is a Yield.
** Jump to the P2 parameter of that Yield.
-** After the jump, register P1 becomes undefined.
+** After the jump, the value register P1 is left with a value
+** such that subsequent OP_Yields go back to the this same
+** OP_EndCoroutine instruction.
**
** See also: InitCoroutine
*/
@@ -95405,8 +95961,8 @@ case OP_EndCoroutine: { /* in1 */
pCaller = &aOp[pIn1->u.i];
assert( pCaller->opcode==OP_Yield );
assert( pCaller->p2>=0 && pCaller->p2nOp );
+ pIn1->u.i = (int)(pOp - p->aOp) - 1;
pOp = &aOp[pCaller->p2 - 1];
- pIn1->flags = MEM_Undefined;
break;
}
@@ -95423,7 +95979,7 @@ case OP_EndCoroutine: { /* in1 */
**
** See also: InitCoroutine
*/
-case OP_Yield: { /* in1, jump */
+case OP_Yield: { /* in1, jump0 */
int pcDest;
pIn1 = &aMem[pOp->p1];
assert( VdbeMemDynamic(pIn1)==0 );
@@ -95753,19 +96309,15 @@ case OP_Blob: { /* out2 */
break;
}
-/* Opcode: Variable P1 P2 * P4 *
-** Synopsis: r[P2]=parameter(P1,P4)
+/* Opcode: Variable P1 P2 * * *
+** Synopsis: r[P2]=parameter(P1)
**
** Transfer the values of bound parameter P1 into register P2
-**
-** If the parameter is named, then its name appears in P4.
-** The P4 value is used by sqlite3_bind_parameter_name().
*/
case OP_Variable: { /* out2 */
Mem *pVar; /* Value being transferred */
assert( pOp->p1>0 && pOp->p1<=p->nVar );
- assert( pOp->p4.z==0 || pOp->p4.z==sqlite3VListNumToName(p->pVList,pOp->p1) );
pVar = &p->aVar[pOp->p1 - 1];
if( sqlite3VdbeMemTooBig(pVar) ){
goto too_big;
@@ -96286,7 +96838,7 @@ case OP_AddImm: { /* in1 */
** without data loss, then jump immediately to P2, or if P2==0
** raise an SQLITE_MISMATCH exception.
*/
-case OP_MustBeInt: { /* jump, in1 */
+case OP_MustBeInt: { /* jump0, in1 */
pIn1 = &aMem[pOp->p1];
if( (pIn1->flags & MEM_Int)==0 ){
applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding);
@@ -96327,7 +96879,7 @@ case OP_RealAffinity: { /* in1 */
}
#endif
-#ifndef SQLITE_OMIT_CAST
+#if !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_ANALYZE)
/* Opcode: Cast P1 P2 * * *
** Synopsis: affinity(r[P1])
**
@@ -96542,7 +97094,9 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
}
}
}else if( affinity==SQLITE_AFF_TEXT && ((flags1 | flags3) & MEM_Str)!=0 ){
- if( (flags1 & MEM_Str)==0 && (flags1&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){
+ if( (flags1 & MEM_Str)!=0 ){
+ pIn1->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal);
+ }else if( (flags1&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){
testcase( pIn1->flags & MEM_Int );
testcase( pIn1->flags & MEM_Real );
testcase( pIn1->flags & MEM_IntReal );
@@ -96551,7 +97105,9 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
flags1 = (pIn1->flags & ~MEM_TypeMask) | (flags1 & MEM_TypeMask);
if( NEVER(pIn1==pIn3) ) flags3 = flags1 | MEM_Str;
}
- if( (flags3 & MEM_Str)==0 && (flags3&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){
+ if( (flags3 & MEM_Str)!=0 ){
+ pIn3->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal);
+ }else if( (flags3&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){
testcase( pIn3->flags & MEM_Int );
testcase( pIn3->flags & MEM_Real );
testcase( pIn3->flags & MEM_IntReal );
@@ -97895,11 +98451,16 @@ case OP_MakeRecord: {
switch( len ){
default: zPayload[7] = (u8)(v&0xff); v >>= 8;
zPayload[6] = (u8)(v&0xff); v >>= 8;
+ /* no break */ deliberate_fall_through
case 6: zPayload[5] = (u8)(v&0xff); v >>= 8;
zPayload[4] = (u8)(v&0xff); v >>= 8;
+ /* no break */ deliberate_fall_through
case 4: zPayload[3] = (u8)(v&0xff); v >>= 8;
+ /* no break */ deliberate_fall_through
case 3: zPayload[2] = (u8)(v&0xff); v >>= 8;
+ /* no break */ deliberate_fall_through
case 2: zPayload[1] = (u8)(v&0xff); v >>= 8;
+ /* no break */ deliberate_fall_through
case 1: zPayload[0] = (u8)(v&0xff);
}
zPayload += len;
@@ -98863,7 +99424,8 @@ case OP_SequenceTest: {
** is the only cursor opcode that works with a pseudo-table.
**
** P3 is the number of fields in the records that will be stored by
-** the pseudo-table.
+** the pseudo-table. If P2 is 0 or negative then the pseudo-cursor
+** will return NULL for every column.
*/
case OP_OpenPseudo: {
VdbeCursor *pCx;
@@ -99006,10 +99568,10 @@ case OP_ColumnsUsed: {
**
** See also: Found, NotFound, SeekGt, SeekGe, SeekLt
*/
-case OP_SeekLT: /* jump, in3, group, ncycle */
-case OP_SeekLE: /* jump, in3, group, ncycle */
-case OP_SeekGE: /* jump, in3, group, ncycle */
-case OP_SeekGT: { /* jump, in3, group, ncycle */
+case OP_SeekLT: /* jump0, in3, group, ncycle */
+case OP_SeekLE: /* jump0, in3, group, ncycle */
+case OP_SeekGE: /* jump0, in3, group, ncycle */
+case OP_SeekGT: { /* jump0, in3, group, ncycle */
int res; /* Comparison result */
int oc; /* Opcode */
VdbeCursor *pC; /* The cursor to seek */
@@ -99677,7 +100239,7 @@ case OP_Found: { /* jump, in3, ncycle */
**
** See also: Found, NotFound, NoConflict, SeekRowid
*/
-case OP_SeekRowid: { /* jump, in3, ncycle */
+case OP_SeekRowid: { /* jump0, in3, ncycle */
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
@@ -100484,7 +101046,7 @@ case OP_NullRow: {
** configured to use Prev, not Next.
*/
case OP_SeekEnd: /* ncycle */
-case OP_Last: { /* jump, ncycle */
+case OP_Last: { /* jump0, ncycle */
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
@@ -100519,28 +101081,38 @@ case OP_Last: { /* jump, ncycle */
break;
}
-/* Opcode: IfSmaller P1 P2 P3 * *
+/* Opcode: IfSizeBetween P1 P2 P3 P4 *
**
-** Estimate the number of rows in the table P1. Jump to P2 if that
-** estimate is less than approximately 2**(0.1*P3).
+** Let N be the approximate number of rows in the table or index
+** with cursor P1 and let X be 10*log2(N) if N is positive or -1
+** if N is zero.
+**
+** Jump to P2 if X is in between P3 and P4, inclusive.
*/
-case OP_IfSmaller: { /* jump */
+case OP_IfSizeBetween: { /* jump */
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
i64 sz;
assert( pOp->p1>=0 && pOp->p1nCursor );
+ assert( pOp->p4type==P4_INT32 );
+ assert( pOp->p3>=-1 && pOp->p3<=640*2 );
+ assert( pOp->p4.i>=-1 && pOp->p4.i<=640*2 );
pC = p->apCsr[pOp->p1];
assert( pC!=0 );
pCrsr = pC->uc.pCursor;
assert( pCrsr );
rc = sqlite3BtreeFirst(pCrsr, &res);
if( rc ) goto abort_due_to_error;
- if( res==0 ){
+ if( res!=0 ){
+ sz = -1; /* -Infinity encoding */
+ }else{
sz = sqlite3BtreeRowCountEst(pCrsr);
- if( ALWAYS(sz>=0) && sqlite3LogEst((u64)sz)p3 ) res = 1;
+ assert( sz>0 );
+ sz = sqlite3LogEst((u64)sz);
}
+ res = sz>=pOp->p3 && sz<=pOp->p4.i;
VdbeBranchTaken(res!=0,2);
if( res ) goto jump_to_p2;
break;
@@ -100593,7 +101165,7 @@ case OP_Sort: { /* jump ncycle */
** from the beginning toward the end. In other words, the cursor is
** configured to use Next, not Prev.
*/
-case OP_Rewind: { /* jump, ncycle */
+case OP_Rewind: { /* jump0, ncycle */
VdbeCursor *pC;
BtCursor *pCrsr;
int res;
@@ -101295,11 +101867,18 @@ case OP_CreateBtree: { /* out2 */
break;
}
-/* Opcode: SqlExec * * * P4 *
+/* Opcode: SqlExec P1 P2 * P4 *
**
** Run the SQL statement or statements specified in the P4 string.
-** Disable Auth and Trace callbacks while those statements are running if
-** P1 is true.
+**
+** The P1 parameter is a bitmask of options:
+**
+** 0x0001 Disable Auth and Trace callbacks while the statements
+** in P4 are running.
+**
+** 0x0002 Set db->nAnalysisLimit to P2 while the statements in
+** P4 are running.
+**
*/
case OP_SqlExec: {
char *zErr;
@@ -101307,6 +101886,7 @@ case OP_SqlExec: {
sqlite3_xauth xAuth;
#endif
u8 mTrace;
+ int savedAnalysisLimit;
sqlite3VdbeIncrWriteCounter(p, 0);
db->nSqlExec++;
@@ -101315,18 +101895,23 @@ case OP_SqlExec: {
xAuth = db->xAuth;
#endif
mTrace = db->mTrace;
- if( pOp->p1 ){
+ savedAnalysisLimit = db->nAnalysisLimit;
+ if( pOp->p1 & 0x0001 ){
#ifndef SQLITE_OMIT_AUTHORIZATION
db->xAuth = 0;
#endif
db->mTrace = 0;
}
+ if( pOp->p1 & 0x0002 ){
+ db->nAnalysisLimit = pOp->p2;
+ }
rc = sqlite3_exec(db, pOp->p4.z, 0, 0, &zErr);
db->nSqlExec--;
#ifndef SQLITE_OMIT_AUTHORIZATION
db->xAuth = xAuth;
#endif
db->mTrace = mTrace;
+ db->nAnalysisLimit = savedAnalysisLimit;
if( zErr || rc ){
sqlite3VdbeError(p, "%s", zErr);
sqlite3_free(zErr);
@@ -101478,11 +102063,11 @@ case OP_DropTrigger: {
/* Opcode: IntegrityCk P1 P2 P3 P4 P5
**
** Do an analysis of the currently open database. Store in
-** register P1 the text of an error message describing any problems.
-** If no problems are found, store a NULL in register P1.
+** register (P1+1) the text of an error message describing any problems.
+** If no problems are found, store a NULL in register (P1+1).
**
-** The register P3 contains one less than the maximum number of allowed errors.
-** At most reg(P3) errors will be reported.
+** The register (P1) contains one less than the maximum number of allowed
+** errors. At most reg(P1) errors will be reported.
** In other words, the analysis stops as soon as reg(P1) errors are
** seen. Reg(P1) is updated with the number of errors remaining.
**
@@ -101502,19 +102087,21 @@ case OP_IntegrityCk: {
Mem *pnErr; /* Register keeping track of errors remaining */
assert( p->bIsReader );
+ assert( pOp->p4type==P4_INTARRAY );
nRoot = pOp->p2;
aRoot = pOp->p4.ai;
assert( nRoot>0 );
+ assert( aRoot!=0 );
assert( aRoot[0]==(Pgno)nRoot );
- assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) );
- pnErr = &aMem[pOp->p3];
+ assert( pOp->p1>0 && (pOp->p1+1)<=(p->nMem+1 - p->nCursor) );
+ pnErr = &aMem[pOp->p1];
assert( (pnErr->flags & MEM_Int)!=0 );
assert( (pnErr->flags & (MEM_Str|MEM_Blob))==0 );
- pIn1 = &aMem[pOp->p1];
+ pIn1 = &aMem[pOp->p1+1];
assert( pOp->p5nDb );
assert( DbMaskTest(p->btreeMask, pOp->p5) );
- rc = sqlite3BtreeIntegrityCheck(db, db->aDb[pOp->p5].pBt, &aRoot[1], nRoot,
- (int)pnErr->u.i+1, &nErr, &z);
+ rc = sqlite3BtreeIntegrityCheck(db, db->aDb[pOp->p5].pBt, &aRoot[1],
+ &aMem[pOp->p3], nRoot, (int)pnErr->u.i+1, &nErr, &z);
sqlite3VdbeMemSetNull(pIn1);
if( nErr==0 ){
assert( z==0 );
@@ -101641,7 +102228,9 @@ case OP_RowSetTest: { /* jump, in1, in3 */
** P1 contains the address of the memory cell that contains the first memory
** cell in an array of values used as arguments to the sub-program. P2
** contains the address to jump to if the sub-program throws an IGNORE
-** exception using the RAISE() function. Register P3 contains the address
+** exception using the RAISE() function. P2 might be zero, if there is
+** no possibility that an IGNORE exception will be raised.
+** Register P3 contains the address
** of a memory cell in this (the parent) VM that is used to allocate the
** memory required by the sub-vdbe at runtime.
**
@@ -101649,7 +102238,7 @@ case OP_RowSetTest: { /* jump, in1, in3 */
**
** If P5 is non-zero, then recursive program invocation is enabled.
*/
-case OP_Program: { /* jump */
+case OP_Program: { /* jump0 */
int nMem; /* Number of memory registers for sub-program */
int nByte; /* Bytes of runtime space required for sub-program */
Mem *pRt; /* Register to allocate runtime space */
@@ -103238,7 +103827,7 @@ case OP_Filter: { /* jump */
** error is encountered.
*/
case OP_Trace:
-case OP_Init: { /* jump */
+case OP_Init: { /* jump0 */
int i;
#ifndef SQLITE_OMIT_TRACE
char *zTrace;
@@ -107139,10 +107728,10 @@ static int bytecodevtabColumn(
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
case 9: /* nexec */
- sqlite3_result_int(ctx, pOp->nExec);
+ sqlite3_result_int64(ctx, pOp->nExec);
break;
case 10: /* ncycle */
- sqlite3_result_int(ctx, pOp->nCycle);
+ sqlite3_result_int64(ctx, pOp->nCycle);
break;
#else
case 9: /* nexec */
@@ -108086,6 +108675,8 @@ static void resolveAlias(
assert( iCol>=0 && iColnExpr );
pOrig = pEList->a[iCol].pExpr;
assert( pOrig!=0 );
+ assert( !ExprHasProperty(pExpr, EP_Reduced|EP_TokenOnly) );
+ if( pExpr->pAggInfo ) return;
db = pParse->db;
pDup = sqlite3ExprDup(db, pOrig, 0);
if( db->mallocFailed ){
@@ -108233,7 +108824,7 @@ static void extendFJMatch(
static SQLITE_NOINLINE int isValidSchemaTableName(
const char *zTab, /* Name as it appears in the SQL */
Table *pTab, /* The schema table we are trying to match */
- Schema *pSchema /* non-NULL if a database qualifier is present */
+ const char *zDb /* non-NULL if a database qualifier is present */
){
const char *zLegacy;
assert( pTab!=0 );
@@ -108244,7 +108835,7 @@ static SQLITE_NOINLINE int isValidSchemaTableName(
if( sqlite3StrICmp(zTab+7, &PREFERRED_TEMP_SCHEMA_TABLE[7])==0 ){
return 1;
}
- if( pSchema==0 ) return 0;
+ if( zDb==0 ) return 0;
if( sqlite3StrICmp(zTab+7, &LEGACY_SCHEMA_TABLE[7])==0 ) return 1;
if( sqlite3StrICmp(zTab+7, &PREFERRED_SCHEMA_TABLE[7])==0 ) return 1;
}else{
@@ -108284,7 +108875,7 @@ static int lookupName(
Parse *pParse, /* The parsing context */
const char *zDb, /* Name of the database containing table, or NULL */
const char *zTab, /* Name of table containing column, or NULL */
- const char *zCol, /* Name of the column. */
+ const Expr *pRight, /* Name of the column. */
NameContext *pNC, /* The name context used to resolve the name */
Expr *pExpr /* Make this EXPR node point to the selected column */
){
@@ -108301,6 +108892,7 @@ static int lookupName(
Table *pTab = 0; /* Table holding the row */
Column *pCol; /* A column of pTab */
ExprList *pFJMatch = 0; /* Matches for FULL JOIN .. USING */
+ const char *zCol = pRight->u.zToken;
assert( pNC ); /* the name context cannot be NULL. */
assert( zCol ); /* The Z in X.Y.Z cannot be NULL */
@@ -108426,7 +109018,7 @@ static int lookupName(
}
}else if( sqlite3StrICmp(zTab, pTab->zName)!=0 ){
if( pTab->tnum!=1 ) continue;
- if( !isValidSchemaTableName(zTab, pTab, pSchema) ) continue;
+ if( !isValidSchemaTableName(zTab, pTab, zDb) ) continue;
}
assert( ExprUseYTab(pExpr) );
if( IN_RENAME_OBJECT && pItem->zAlias ){
@@ -108473,8 +109065,37 @@ static int lookupName(
}
}
if( 0==cnt && VisibleRowid(pTab) ){
+ /* pTab is a potential ROWID match. Keep track of it and match
+ ** the ROWID later if that seems appropriate. (Search for "cntTab"
+ ** to find related code.) Only allow a ROWID match if there is
+ ** a single ROWID match candidate.
+ */
+#ifdef SQLITE_ALLOW_ROWID_IN_VIEW
+ /* In SQLITE_ALLOW_ROWID_IN_VIEW mode, allow a ROWID match
+ ** if there is a single VIEW candidate or if there is a single
+ ** non-VIEW candidate plus multiple VIEW candidates. In other
+ ** words non-VIEW candidate terms take precedence over VIEWs.
+ */
+ if( cntTab==0
+ || (cntTab==1
+ && ALWAYS(pMatch!=0)
+ && ALWAYS(pMatch->pTab!=0)
+ && (pMatch->pTab->tabFlags & TF_Ephemeral)!=0
+ && (pTab->tabFlags & TF_Ephemeral)==0)
+ ){
+ cntTab = 1;
+ pMatch = pItem;
+ }else{
+ cntTab++;
+ }
+#else
+ /* The (much more common) non-SQLITE_ALLOW_ROWID_IN_VIEW case is
+ ** simpler since we require exactly one candidate, which will
+ ** always be a non-VIEW
+ */
cntTab++;
pMatch = pItem;
+#endif
}
}
if( pMatch ){
@@ -108503,7 +109124,8 @@ static int lookupName(
if( pParse->bReturning ){
if( (pNC->ncFlags & NC_UBaseReg)!=0
&& ALWAYS(zTab==0
- || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0)
+ || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0
+ || isValidSchemaTableName(zTab, pParse->pTriggerTab, 0))
){
pExpr->iTable = op!=TK_DELETE;
pTab = pParse->pTriggerTab;
@@ -108600,13 +109222,18 @@ static int lookupName(
** Perhaps the name is a reference to the ROWID
*/
if( cnt==0
- && cntTab==1
+ && cntTab>=1
&& pMatch
&& (pNC->ncFlags & (NC_IdxExpr|NC_GenCol))==0
&& sqlite3IsRowid(zCol)
&& ALWAYS(VisibleRowid(pMatch->pTab) || pMatch->fg.isNestedFrom)
){
- cnt = 1;
+ cnt = cntTab;
+#if SQLITE_ALLOW_ROWID_IN_VIEW+0==2
+ if( pMatch->pTab!=0 && IsView(pMatch->pTab) ){
+ eNewExprOp = TK_NULL;
+ }
+#endif
if( pMatch->fg.isNestedFrom==0 ) pExpr->iColumn = -1;
pExpr->affExpr = SQLITE_AFF_INTEGER;
}
@@ -108760,6 +109387,10 @@ static int lookupName(
sqlite3ErrorMsg(pParse, "%s: %s.%s.%s", zErr, zDb, zTab, zCol);
}else if( zTab ){
sqlite3ErrorMsg(pParse, "%s: %s.%s", zErr, zTab, zCol);
+ }else if( cnt==0 && ExprHasProperty(pRight,EP_DblQuoted) ){
+ sqlite3ErrorMsg(pParse, "%s: \"%s\" - should this be a"
+ " string literal in single-quotes?",
+ zErr, zCol);
}else{
sqlite3ErrorMsg(pParse, "%s: %s", zErr, zCol);
}
@@ -108793,8 +109424,12 @@ static int lookupName(
** If a generated column is referenced, set bits for every column
** of the table.
*/
- if( pExpr->iColumn>=0 && cnt==1 && pMatch!=0 ){
- pMatch->colUsed |= sqlite3ExprColUsed(pExpr);
+ if( pMatch ){
+ if( pExpr->iColumn>=0 ){
+ pMatch->colUsed |= sqlite3ExprColUsed(pExpr);
+ }else{
+ pMatch->fg.rowidUsed = 1;
+ }
}
pExpr->op = eNewExprOp;
@@ -108971,6 +109606,19 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
** resolved. This prevents "column" from being counted as having been
** referenced, which might prevent a SELECT from being erroneously
** marked as correlated.
+ **
+ ** 2024-03-28: Beware of aggregates. A bare column of aggregated table
+ ** can still evaluate to NULL even though it is marked as NOT NULL.
+ ** Example:
+ **
+ ** CREATE TABLE t1(a INT NOT NULL);
+ ** SELECT a, a IS NULL, a IS NOT NULL, count(*) FROM t1;
+ **
+ ** The "a IS NULL" and "a IS NOT NULL" expressions cannot be optimized
+ ** here because at the time this case is hit, we do not yet know whether
+ ** or not t1 is being aggregated. We have to assume the worst and omit
+ ** the optimization. The only time it is safe to apply this optimization
+ ** is within the WHERE clause.
*/
case TK_NOTNULL:
case TK_ISNULL: {
@@ -108981,19 +109629,36 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
anRef[i] = p->nRef;
}
sqlite3WalkExpr(pWalker, pExpr->pLeft);
- if( 0==sqlite3ExprCanBeNull(pExpr->pLeft) && !IN_RENAME_OBJECT ){
- testcase( ExprHasProperty(pExpr, EP_OuterON) );
- assert( !ExprHasProperty(pExpr, EP_IntValue) );
- pExpr->u.iValue = (pExpr->op==TK_NOTNULL);
- pExpr->flags |= EP_IntValue;
- pExpr->op = TK_INTEGER;
+ if( IN_RENAME_OBJECT ) return WRC_Prune;
+ if( sqlite3ExprCanBeNull(pExpr->pLeft) ){
+ /* The expression can be NULL. So the optimization does not apply */
+ return WRC_Prune;
+ }
- for(i=0, p=pNC; p && ipNext, i++){
- p->nRef = anRef[i];
+ for(i=0, p=pNC; p; p=p->pNext, i++){
+ if( (p->ncFlags & NC_Where)==0 ){
+ return WRC_Prune; /* Not in a WHERE clause. Unsafe to optimize. */
}
- sqlite3ExprDelete(pParse->db, pExpr->pLeft);
- pExpr->pLeft = 0;
}
+ testcase( ExprHasProperty(pExpr, EP_OuterON) );
+ assert( !ExprHasProperty(pExpr, EP_IntValue) );
+#if TREETRACE_ENABLED
+ if( sqlite3TreeTrace & 0x80000 ){
+ sqlite3DebugPrintf(
+ "NOT NULL strength reduction converts the following to %d:\n",
+ pExpr->op==TK_NOTNULL
+ );
+ sqlite3ShowExpr(pExpr);
+ }
+#endif /* TREETRACE_ENABLED */
+ pExpr->u.iValue = (pExpr->op==TK_NOTNULL);
+ pExpr->flags |= EP_IntValue;
+ pExpr->op = TK_INTEGER;
+ for(i=0, p=pNC; p && ipNext, i++){
+ p->nRef = anRef[i];
+ }
+ sqlite3ExprDelete(pParse->db, pExpr->pLeft);
+ pExpr->pLeft = 0;
return WRC_Prune;
}
@@ -109007,7 +109672,6 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
*/
case TK_ID:
case TK_DOT: {
- const char *zColumn;
const char *zTable;
const char *zDb;
Expr *pRight;
@@ -109016,7 +109680,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
zDb = 0;
zTable = 0;
assert( !ExprHasProperty(pExpr, EP_IntValue) );
- zColumn = pExpr->u.zToken;
+ pRight = pExpr;
}else{
Expr *pLeft = pExpr->pLeft;
testcase( pNC->ncFlags & NC_IdxExpr );
@@ -109035,14 +109699,13 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
}
assert( ExprUseUToken(pLeft) && ExprUseUToken(pRight) );
zTable = pLeft->u.zToken;
- zColumn = pRight->u.zToken;
assert( ExprUseYTab(pExpr) );
if( IN_RENAME_OBJECT ){
sqlite3RenameTokenRemap(pParse, (void*)pExpr, (void*)pRight);
sqlite3RenameTokenRemap(pParse, (void*)&pExpr->y.pTab, (void*)pLeft);
}
}
- return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr);
+ return lookupName(pParse, zDb, zTable, pRight, pNC, pExpr);
}
/* Resolve function names
@@ -109218,11 +109881,9 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
#endif
}
}
-#ifndef SQLITE_OMIT_WINDOWFUNC
- else if( ExprHasProperty(pExpr, EP_WinFunc) ){
+ else if( ExprHasProperty(pExpr, EP_WinFunc) || pExpr->pLeft ){
is_agg = 1;
}
-#endif
sqlite3WalkExprList(pWalker, pList);
if( is_agg ){
if( pExpr->pLeft ){
@@ -109292,6 +109953,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
testcase( pNC->ncFlags & NC_PartIdx );
testcase( pNC->ncFlags & NC_IdxExpr );
testcase( pNC->ncFlags & NC_GenCol );
+ assert( pExpr->x.pSelect );
if( pNC->ncFlags & NC_SelfRef ){
notValidImpl(pParse, pNC, "subqueries", pExpr, pExpr);
}else{
@@ -109300,6 +109962,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
assert( pNC->nRef>=nRef );
if( nRef!=pNC->nRef ){
ExprSetProperty(pExpr, EP_VarSelect);
+ pExpr->x.pSelect->selFlags |= SF_Correlated;
}
pNC->ncFlags |= NC_Subquery;
}
@@ -109825,6 +110488,7 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
if( pOuterNC ) pOuterNC->nNestedSelect++;
for(i=0; ipSrc->nSrc; i++){
SrcItem *pItem = &p->pSrc->a[i];
+ assert( pItem->zName!=0 || pItem->pSelect!=0 );/* Test of tag-20240424-1*/
if( pItem->pSelect && (pItem->pSelect->selFlags & SF_Resolved)==0 ){
int nRef = pOuterNC ? pOuterNC->nRef : 0;
const char *zSavedContext = pParse->zAuthContext;
@@ -109893,7 +110557,9 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
}
if( sqlite3ResolveExprNames(&sNC, p->pHaving) ) return WRC_Abort;
}
+ sNC.ncFlags |= NC_Where;
if( sqlite3ResolveExprNames(&sNC, p->pWhere) ) return WRC_Abort;
+ sNC.ncFlags &= ~NC_Where;
/* Resolve names in table-valued-function arguments */
for(i=0; ipSrc->nSrc; i++){
@@ -110084,6 +110750,9 @@ SQLITE_PRIVATE int sqlite3ResolveExprNames(
** Resolve all names for all expression in an expression list. This is
** just like sqlite3ResolveExprNames() except that it works for an expression
** list rather than a single expression.
+**
+** The return value is SQLITE_OK (0) for success or SQLITE_ERROR (1) for a
+** failure.
*/
SQLITE_PRIVATE int sqlite3ResolveExprListNames(
NameContext *pNC, /* Namespace to resolve expressions in. */
@@ -110092,7 +110761,7 @@ SQLITE_PRIVATE int sqlite3ResolveExprListNames(
int i;
int savedHasAgg = 0;
Walker w;
- if( pList==0 ) return WRC_Continue;
+ if( pList==0 ) return SQLITE_OK;
w.pParse = pNC->pParse;
w.xExprCallback = resolveExprStep;
w.xSelectCallback = resolveSelectStep;
@@ -110106,7 +110775,7 @@ SQLITE_PRIVATE int sqlite3ResolveExprListNames(
#if SQLITE_MAX_EXPR_DEPTH>0
w.pParse->nHeight += pExpr->nHeight;
if( sqlite3ExprCheckHeight(w.pParse, w.pParse->nHeight) ){
- return WRC_Abort;
+ return SQLITE_ERROR;
}
#endif
sqlite3WalkExprNN(&w, pExpr);
@@ -110123,10 +110792,10 @@ SQLITE_PRIVATE int sqlite3ResolveExprListNames(
(NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg);
pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg);
}
- if( w.pParse->nErr>0 ) return WRC_Abort;
+ if( w.pParse->nErr>0 ) return SQLITE_ERROR;
}
pNC->ncFlags |= savedHasAgg;
- return WRC_Continue;
+ return SQLITE_OK;
}
/*
@@ -110432,9 +111101,10 @@ SQLITE_PRIVATE Expr *sqlite3ExprSkipCollateAndLikely(Expr *pExpr){
assert( pExpr->x.pList->nExpr>0 );
assert( pExpr->op==TK_FUNCTION );
pExpr = pExpr->x.pList->a[0].pExpr;
- }else{
- assert( pExpr->op==TK_COLLATE );
+ }else if( pExpr->op==TK_COLLATE ){
pExpr = pExpr->pLeft;
+ }else{
+ break;
}
}
return pExpr;
@@ -111128,11 +111798,12 @@ SQLITE_PRIVATE void sqlite3ExprSetErrorOffset(Expr *pExpr, int iOfst){
** appear to be quoted. If the quotes were of the form "..." (double-quotes)
** then the EP_DblQuoted flag is set on the expression node.
**
-** Special case: If op==TK_INTEGER and pToken points to a string that
-** can be translated into a 32-bit integer, then the token is not
-** stored in u.zToken. Instead, the integer values is written
-** into u.iValue and the EP_IntValue flag is set. No extra storage
+** Special case (tag-20240227-a): If op==TK_INTEGER and pToken points to
+** a string that can be translated into a 32-bit integer, then the token is
+** not stored in u.zToken. Instead, the integer values is written
+** into u.iValue and the EP_IntValue flag is set. No extra storage
** is allocated to hold the integer text and the dequote flag is ignored.
+** See also tag-20240227-b.
*/
SQLITE_PRIVATE Expr *sqlite3ExprAlloc(
sqlite3 *db, /* Handle for sqlite3DbMallocRawNN() */
@@ -111148,7 +111819,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprAlloc(
if( pToken ){
if( op!=TK_INTEGER || pToken->z==0
|| sqlite3GetInt32(pToken->z, &iValue)==0 ){
- nExtra = pToken->n+1;
+ nExtra = pToken->n+1; /* tag-20240227-a */
assert( iValue>=0 );
}
}
@@ -111580,6 +112251,7 @@ SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr, u32 n
static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){
assert( p!=0 );
assert( db!=0 );
+exprDeleteRestart:
assert( !ExprUseUValue(p) || p->u.iValue>=0 );
assert( !ExprUseYWin(p) || !ExprUseYSub(p) );
assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed );
@@ -111595,7 +112267,6 @@ static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){
if( !ExprHasProperty(p, (EP_TokenOnly|EP_Leaf)) ){
/* The Expr.x union is never used at the same time as Expr.pRight */
assert( (ExprUseXList(p) && p->x.pList==0) || p->pRight==0 );
- if( p->pLeft && p->op!=TK_SELECT_COLUMN ) sqlite3ExprDeleteNN(db, p->pLeft);
if( p->pRight ){
assert( !ExprHasProperty(p, EP_WinFunc) );
sqlite3ExprDeleteNN(db, p->pRight);
@@ -111610,6 +112281,19 @@ static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){
}
#endif
}
+ if( p->pLeft && p->op!=TK_SELECT_COLUMN ){
+ Expr *pLeft = p->pLeft;
+ if( !ExprHasProperty(p, EP_Static)
+ && !ExprHasProperty(pLeft, EP_Static)
+ ){
+ /* Avoid unnecessary recursion on unary operators */
+ sqlite3DbNNFreeNN(db, p);
+ p = pLeft;
+ goto exprDeleteRestart;
+ }else{
+ sqlite3ExprDeleteNN(db, pLeft);
+ }
+ }
}
if( !ExprHasProperty(p, EP_Static) ){
sqlite3DbNNFreeNN(db, p);
@@ -111642,11 +112326,11 @@ SQLITE_PRIVATE void sqlite3ClearOnOrUsing(sqlite3 *db, OnOrUsing *p){
**
** The pExpr might be deleted immediately on an OOM error.
**
-** The deferred delete is (currently) implemented by adding the
-** pExpr to the pParse->pConstExpr list with a register number of 0.
+** Return 0 if the delete was successfully deferred. Return non-zero
+** if the delete happened immediately because of an OOM.
*/
-SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){
- sqlite3ParserAddCleanup(pParse, sqlite3ExprDeleteGeneric, pExpr);
+SQLITE_PRIVATE int sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){
+ return 0==sqlite3ParserAddCleanup(pParse, sqlite3ExprDeleteGeneric, pExpr);
}
/* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the
@@ -112082,17 +112766,19 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, const SrcList *p, int fla
pNewItem->iCursor = pOldItem->iCursor;
pNewItem->addrFillSub = pOldItem->addrFillSub;
pNewItem->regReturn = pOldItem->regReturn;
+ pNewItem->regResult = pOldItem->regResult;
if( pNewItem->fg.isIndexedBy ){
pNewItem->u1.zIndexedBy = sqlite3DbStrDup(db, pOldItem->u1.zIndexedBy);
+ }else if( pNewItem->fg.isTabFunc ){
+ pNewItem->u1.pFuncArg =
+ sqlite3ExprListDup(db, pOldItem->u1.pFuncArg, flags);
+ }else{
+ pNewItem->u1.nRow = pOldItem->u1.nRow;
}
pNewItem->u2 = pOldItem->u2;
if( pNewItem->fg.isCte ){
pNewItem->u2.pCteUse->nUse++;
}
- if( pNewItem->fg.isTabFunc ){
- pNewItem->u1.pFuncArg =
- sqlite3ExprListDup(db, pOldItem->u1.pFuncArg, flags);
- }
pTab = pNewItem->pTab = pOldItem->pTab;
if( pTab ){
pTab->nTabRef++;
@@ -112558,6 +113244,54 @@ SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr *pExpr){
return pExpr;
}
+/*
+** pExpr is a TK_FUNCTION node. Try to determine whether or not the
+** function is a constant function. A function is constant if all of
+** the following are true:
+**
+** (1) It is a scalar function (not an aggregate or window function)
+** (2) It has either the SQLITE_FUNC_CONSTANT or SQLITE_FUNC_SLOCHNG
+** property.
+** (3) All of its arguments are constants
+**
+** This routine sets pWalker->eCode to 0 if pExpr is not a constant.
+** It makes no changes to pWalker->eCode if pExpr is constant. In
+** every case, it returns WRC_Abort.
+**
+** Called as a service subroutine from exprNodeIsConstant().
+*/
+static SQLITE_NOINLINE int exprNodeIsConstantFunction(
+ Walker *pWalker,
+ Expr *pExpr
+){
+ int n; /* Number of arguments */
+ ExprList *pList; /* List of arguments */
+ FuncDef *pDef; /* The function */
+ sqlite3 *db; /* The database */
+
+ assert( pExpr->op==TK_FUNCTION );
+ if( ExprHasProperty(pExpr, EP_TokenOnly)
+ || (pList = pExpr->x.pList)==0
+ ){;
+ n = 0;
+ }else{
+ n = pList->nExpr;
+ sqlite3WalkExprList(pWalker, pList);
+ if( pWalker->eCode==0 ) return WRC_Abort;
+ }
+ db = pWalker->pParse->db;
+ pDef = sqlite3FindFunction(db, pExpr->u.zToken, n, ENC(db), 0);
+ if( pDef==0
+ || pDef->xFinalize!=0
+ || (pDef->funcFlags & (SQLITE_FUNC_CONSTANT|SQLITE_FUNC_SLOCHNG))==0
+ || ExprHasProperty(pExpr, EP_WinFunc)
+ ){
+ pWalker->eCode = 0;
+ return WRC_Abort;
+ }
+ return WRC_Prune;
+}
+
/*
** These routines are Walker callbacks used to check expressions to
@@ -112586,6 +113320,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr *pExpr){
** malformed schema error.
*/
static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
+ assert( pWalker->eCode>0 );
/* If pWalker->eCode is 2 then any term of the expression that comes from
** the ON or USING clauses of an outer join disqualifies the expression
@@ -112605,6 +113340,8 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
){
if( pWalker->eCode==5 ) ExprSetProperty(pExpr, EP_FromDDL);
return WRC_Continue;
+ }else if( pWalker->pParse ){
+ return exprNodeIsConstantFunction(pWalker, pExpr);
}else{
pWalker->eCode = 0;
return WRC_Abort;
@@ -112633,9 +113370,11 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
case TK_IF_NULL_ROW:
case TK_REGISTER:
case TK_DOT:
+ case TK_RAISE:
testcase( pExpr->op==TK_REGISTER );
testcase( pExpr->op==TK_IF_NULL_ROW );
testcase( pExpr->op==TK_DOT );
+ testcase( pExpr->op==TK_RAISE );
pWalker->eCode = 0;
return WRC_Abort;
case TK_VARIABLE:
@@ -112657,15 +113396,15 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
return WRC_Continue;
}
}
-static int exprIsConst(Expr *p, int initFlag, int iCur){
+static int exprIsConst(Parse *pParse, Expr *p, int initFlag){
Walker w;
w.eCode = initFlag;
+ w.pParse = pParse;
w.xExprCallback = exprNodeIsConstant;
w.xSelectCallback = sqlite3SelectWalkFail;
#ifdef SQLITE_DEBUG
w.xSelectCallback2 = sqlite3SelectWalkAssert2;
#endif
- w.u.iCur = iCur;
sqlite3WalkExpr(&w, p);
return w.eCode;
}
@@ -112677,9 +113416,15 @@ static int exprIsConst(Expr *p, int initFlag, int iCur){
** For the purposes of this function, a double-quoted string (ex: "abc")
** is considered a variable but a single-quoted string (ex: 'abc') is
** a constant.
+**
+** The pParse parameter may be NULL. But if it is NULL, there is no way
+** to determine if function calls are constant or not, and hence all
+** function calls will be considered to be non-constant. If pParse is
+** not NULL, then a function call might be constant, depending on the
+** function and on its parameters.
*/
-SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
- return exprIsConst(p, 1, 0);
+SQLITE_PRIVATE int sqlite3ExprIsConstant(Parse *pParse, Expr *p){
+ return exprIsConst(pParse, p, 1);
}
/*
@@ -112695,8 +113440,24 @@ SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
** can be added to the pParse->pConstExpr list and evaluated once when
** the prepared statement starts up. See sqlite3ExprCodeRunJustOnce().
*/
-SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
- return exprIsConst(p, 2, 0);
+static int sqlite3ExprIsConstantNotJoin(Parse *pParse, Expr *p){
+ return exprIsConst(pParse, p, 2);
+}
+
+/*
+** This routine examines sub-SELECT statements as an expression is being
+** walked as part of sqlite3ExprIsTableConstant(). Sub-SELECTs are considered
+** constant as long as they are uncorrelated - meaning that they do not
+** contain any terms from outer contexts.
+*/
+static int exprSelectWalkTableConstant(Walker *pWalker, Select *pSelect){
+ assert( pSelect!=0 );
+ assert( pWalker->eCode==3 || pWalker->eCode==0 );
+ if( (pSelect->selFlags & SF_Correlated)!=0 ){
+ pWalker->eCode = 0;
+ return WRC_Abort;
+ }
+ return WRC_Prune;
}
/*
@@ -112704,9 +113465,26 @@ SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
** for any single row of the table with cursor iCur. In other words, the
** expression must not refer to any non-deterministic function nor any
** table other than iCur.
+**
+** Consider uncorrelated subqueries to be constants if the bAllowSubq
+** parameter is true.
*/
-SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){
- return exprIsConst(p, 3, iCur);
+static int sqlite3ExprIsTableConstant(Expr *p, int iCur, int bAllowSubq){
+ Walker w;
+ w.eCode = 3;
+ w.pParse = 0;
+ w.xExprCallback = exprNodeIsConstant;
+ if( bAllowSubq ){
+ w.xSelectCallback = exprSelectWalkTableConstant;
+ }else{
+ w.xSelectCallback = sqlite3SelectWalkFail;
+#ifdef SQLITE_DEBUG
+ w.xSelectCallback2 = sqlite3SelectWalkAssert2;
+#endif
+ }
+ w.u.iCur = iCur;
+ sqlite3WalkExpr(&w, p);
+ return w.eCode;
}
/*
@@ -112724,7 +113502,10 @@ SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){
**
** (1) pExpr cannot refer to any table other than pSrc->iCursor.
**
-** (2) pExpr cannot use subqueries or non-deterministic functions.
+** (2a) pExpr cannot use subqueries unless the bAllowSubq parameter is
+** true and the subquery is non-correlated
+**
+** (2b) pExpr cannot use non-deterministic functions.
**
** (3) pSrc cannot be part of the left operand for a RIGHT JOIN.
** (Is there some way to relax this constraint?)
@@ -112753,7 +113534,8 @@ SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){
SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint(
Expr *pExpr, /* The constraint */
const SrcList *pSrcList, /* Complete FROM clause */
- int iSrc /* Which element of pSrcList to use */
+ int iSrc, /* Which element of pSrcList to use */
+ int bAllowSubq /* Allow non-correlated subqueries */
){
const SrcItem *pSrc = &pSrcList->a[iSrc];
if( pSrc->fg.jointype & JT_LTORJ ){
@@ -112778,7 +113560,8 @@ SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint(
}
}
}
- return sqlite3ExprIsTableConstant(pExpr, pSrc->iCursor); /* rules (1), (2) */
+ /* Rules (1), (2a), and (2b) handled by the following: */
+ return sqlite3ExprIsTableConstant(pExpr, pSrc->iCursor, bAllowSubq);
}
@@ -112863,7 +113646,7 @@ SQLITE_PRIVATE int sqlite3ExprIsConstantOrGroupBy(Parse *pParse, Expr *p, ExprLi
*/
SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p, u8 isInit){
assert( isInit==0 || isInit==1 );
- return exprIsConst(p, 4+isInit, 0);
+ return exprIsConst(0, p, 4+isInit);
}
#ifdef SQLITE_ENABLE_CURSOR_HINTS
@@ -112953,9 +113736,12 @@ SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){
return 0;
case TK_COLUMN:
assert( ExprUseYTab(p) );
- return ExprHasProperty(p, EP_CanBeNull) ||
- NEVER(p->y.pTab==0) || /* Reference to column of index on expr */
- (p->iColumn>=0
+ return ExprHasProperty(p, EP_CanBeNull)
+ || NEVER(p->y.pTab==0) /* Reference to column of index on expr */
+#ifdef SQLITE_ALLOW_ROWID_IN_VIEW
+ || (p->iColumn==XN_ROWID && IsView(p->y.pTab))
+#endif
+ || (p->iColumn>=0
&& p->y.pTab->aCol!=0 /* Possible due to prior error */
&& ALWAYS(p->iColumny.pTab->nCol)
&& p->y.pTab->aCol[p->iColumn].notNull==0);
@@ -113108,13 +113894,13 @@ static void sqlite3SetHasNullFlag(Vdbe *v, int iCur, int regHasNull){
** The argument is an IN operator with a list (not a subquery) on the
** right-hand side. Return TRUE if that list is constant.
*/
-static int sqlite3InRhsIsConstant(Expr *pIn){
+static int sqlite3InRhsIsConstant(Parse *pParse, Expr *pIn){
Expr *pLHS;
int res;
assert( !ExprHasProperty(pIn, EP_xIsSelect) );
pLHS = pIn->pLeft;
pIn->pLeft = 0;
- res = sqlite3ExprIsConstant(pIn);
+ res = sqlite3ExprIsConstant(pParse, pIn);
pIn->pLeft = pLHS;
return res;
}
@@ -113383,7 +114169,7 @@ SQLITE_PRIVATE int sqlite3FindInIndex(
if( eType==0
&& (inFlags & IN_INDEX_NOOP_OK)
&& ExprUseXList(pX)
- && (!sqlite3InRhsIsConstant(pX) || pX->x.pList->nExpr<=2)
+ && (!sqlite3InRhsIsConstant(pParse,pX) || pX->x.pList->nExpr<=2)
){
pParse->nTab--; /* Back out the allocation of the unused cursor */
iTab = -1; /* Cursor is not allocated */
@@ -113666,7 +114452,7 @@ SQLITE_PRIVATE void sqlite3CodeRhsOfIN(
** this code only executes once. Because for a non-constant
** expression we need to rerun this code each time.
*/
- if( addrOnce && !sqlite3ExprIsConstant(pE2) ){
+ if( addrOnce && !sqlite3ExprIsConstant(pParse, pE2) ){
sqlite3VdbeChangeToNoop(v, addrOnce-1);
sqlite3VdbeChangeToNoop(v, addrOnce);
ExprClearProperty(pExpr, EP_Subrtn);
@@ -114830,12 +115616,6 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target)
assert( pExpr->u.zToken!=0 );
assert( pExpr->u.zToken[0]!=0 );
sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target);
- if( pExpr->u.zToken[1]!=0 ){
- const char *z = sqlite3VListNumToName(pParse->pVList, pExpr->iColumn);
- assert( pExpr->u.zToken[0]=='?' || (z && !strcmp(pExpr->u.zToken, z)) );
- pParse->pVList[0] = 0; /* Indicate VList may no longer be enlarged */
- sqlite3VdbeAppendP4(v, (char*)z, P4_STATIC);
- }
return target;
}
case TK_REGISTER: {
@@ -115009,7 +115789,9 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target)
}
#endif
- if( ConstFactorOk(pParse) && sqlite3ExprIsConstantNotJoin(pExpr) ){
+ if( ConstFactorOk(pParse)
+ && sqlite3ExprIsConstantNotJoin(pParse,pExpr)
+ ){
/* SQL functions can be expensive. So try to avoid running them
** multiple times if we know they always give the same result */
return sqlite3ExprCodeRunJustOnce(pParse, pExpr, -1);
@@ -115040,7 +115822,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target)
}
for(i=0; ia[i].pExpr) ){
+ if( i<32 && sqlite3ExprIsConstant(pParse, pFarg->a[i].pExpr) ){
testcase( i==31 );
constMask |= MASKBIT32(i);
}
@@ -115182,8 +115964,9 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target)
if( !ExprHasProperty(pExpr, EP_Collate) ){
/* A TK_COLLATE Expr node without the EP_Collate tag is a so-called
** "SOFT-COLLATE" that is added to constraints that are pushed down
- ** from outer queries into sub-queries by the push-down optimization.
- ** Clear subtypes as subtypes may not cross a subquery boundary.
+ ** from outer queries into sub-queries by the WHERE-clause push-down
+ ** optimization. Clear subtypes as subtypes may not cross a subquery
+ ** boundary.
*/
assert( pExpr->pLeft );
sqlite3ExprCode(pParse, pExpr->pLeft, target);
@@ -115507,7 +116290,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){
if( ConstFactorOk(pParse)
&& ALWAYS(pExpr!=0)
&& pExpr->op!=TK_REGISTER
- && sqlite3ExprIsConstantNotJoin(pExpr)
+ && sqlite3ExprIsConstantNotJoin(pParse, pExpr)
){
*pReg = 0;
r2 = sqlite3ExprCodeRunJustOnce(pParse, pExpr, -1);
@@ -115571,7 +116354,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse *pParse, Expr *pExpr, int target){
** might choose to code the expression at initialization time.
*/
SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse *pParse, Expr *pExpr, int target){
- if( pParse->okConstFactor && sqlite3ExprIsConstantNotJoin(pExpr) ){
+ if( pParse->okConstFactor && sqlite3ExprIsConstantNotJoin(pParse,pExpr) ){
sqlite3ExprCodeRunJustOnce(pParse, pExpr, target);
}else{
sqlite3ExprCodeCopy(pParse, pExpr, target);
@@ -115630,7 +116413,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeExprList(
sqlite3VdbeAddOp2(v, copyOp, j+srcReg-1, target+i);
}
}else if( (flags & SQLITE_ECEL_FACTOR)!=0
- && sqlite3ExprIsConstantNotJoin(pExpr)
+ && sqlite3ExprIsConstantNotJoin(pParse,pExpr)
){
sqlite3ExprCodeRunJustOnce(pParse, pExpr, target+i);
}else{
@@ -116781,9 +117564,8 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){
&& pAggInfo->aCol[iAgg].pCExpr==pExpr
){
pExpr = sqlite3ExprDup(db, pExpr, 0);
- if( pExpr ){
+ if( pExpr && !sqlite3ExprDeferredDelete(pParse, pExpr) ){
pAggInfo->aCol[iAgg].pCExpr = pExpr;
- sqlite3ExprDeferredDelete(pParse, pExpr);
}
}
}else{
@@ -116792,9 +117574,8 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){
&& pAggInfo->aFunc[iAgg].pFExpr==pExpr
){
pExpr = sqlite3ExprDup(db, pExpr, 0);
- if( pExpr ){
+ if( pExpr && !sqlite3ExprDeferredDelete(pParse, pExpr) ){
pAggInfo->aFunc[iAgg].pFExpr = pExpr;
- sqlite3ExprDeferredDelete(pParse, pExpr);
}
}
}
@@ -118647,7 +119428,7 @@ static int renameResolveTrigger(Parse *pParse){
/* ALWAYS() because if the table of the trigger does not exist, the
** error would have been hit before this point */
if( ALWAYS(pParse->pTriggerTab) ){
- rc = sqlite3ViewGetColumnNames(pParse, pParse->pTriggerTab);
+ rc = sqlite3ViewGetColumnNames(pParse, pParse->pTriggerTab)!=0;
}
/* Resolve symbols in WHEN clause */
@@ -119765,7 +120546,12 @@ SQLITE_PRIVATE void sqlite3AlterDropColumn(Parse *pParse, SrcList *pSrc, const T
if( i==pTab->iPKey ){
sqlite3VdbeAddOp2(v, OP_Null, 0, regOut);
}else{
+ char aff = pTab->aCol[i].affinity;
+ if( aff==SQLITE_AFF_REAL ){
+ pTab->aCol[i].affinity = SQLITE_AFF_NUMERIC;
+ }
sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, i, regOut);
+ pTab->aCol[i].affinity = aff;
}
nField++;
}
@@ -120686,7 +121472,7 @@ static void statGet(
if( iVal==2 && p->nRow*10 <= nDistinct*11 ) iVal = 1;
sqlite3_str_appendf(&sStat, " %llu", iVal);
#ifdef SQLITE_ENABLE_STAT4
- assert( p->current.anEq[i] );
+ assert( p->current.anEq[i] || p->nRow==0 );
#endif
}
sqlite3ResultStrAccum(context, &sStat);
@@ -120871,7 +121657,7 @@ static void analyzeOneTable(
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
int nCol; /* Number of columns in pIdx. "N" */
- int addrRewind; /* Address of "OP_Rewind iIdxCur" */
+ int addrGotoEnd; /* Address of "OP_Rewind iIdxCur" */
int addrNextRow; /* Address of "next_row:" */
const char *zIdxName; /* Name of the index */
int nColTest; /* Number of columns to test for changes */
@@ -120895,9 +121681,14 @@ static void analyzeOneTable(
/*
** Pseudo-code for loop that calls stat_push():
**
- ** Rewind csr
- ** if eof(csr) goto end_of_scan;
** regChng = 0
+ ** Rewind csr
+ ** if eof(csr){
+ ** stat_init() with count = 0;
+ ** goto end_of_scan;
+ ** }
+ ** count()
+ ** stat_init()
** goto chng_addr_0;
**
** next_row:
@@ -120936,41 +121727,36 @@ static void analyzeOneTable(
sqlite3VdbeSetP4KeyInfo(pParse, pIdx);
VdbeComment((v, "%s", pIdx->zName));
- /* Invoke the stat_init() function. The arguments are:
+ /* Implementation of the following:
**
+ ** regChng = 0
+ ** Rewind csr
+ ** if eof(csr){
+ ** stat_init() with count = 0;
+ ** goto end_of_scan;
+ ** }
+ ** count()
+ ** stat_init()
+ ** goto chng_addr_0;
+ */
+ assert( regTemp2==regStat+4 );
+ sqlite3VdbeAddOp2(v, OP_Integer, db->nAnalysisLimit, regTemp2);
+
+ /* Arguments to stat_init():
** (1) the number of columns in the index including the rowid
** (or for a WITHOUT ROWID table, the number of PK columns),
** (2) the number of columns in the key without the rowid/pk
- ** (3) estimated number of rows in the index,
- */
+ ** (3) estimated number of rows in the index. */
sqlite3VdbeAddOp2(v, OP_Integer, nCol, regStat+1);
assert( regRowid==regStat+2 );
sqlite3VdbeAddOp2(v, OP_Integer, pIdx->nKeyCol, regRowid);
-#ifdef SQLITE_ENABLE_STAT4
- if( OptimizationEnabled(db, SQLITE_Stat4) ){
- sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regTemp);
- addrRewind = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur);
- VdbeCoverage(v);
- }else
-#endif
- {
- addrRewind = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur);
- VdbeCoverage(v);
- sqlite3VdbeAddOp3(v, OP_Count, iIdxCur, regTemp, 1);
- }
- assert( regTemp2==regStat+4 );
- sqlite3VdbeAddOp2(v, OP_Integer, db->nAnalysisLimit, regTemp2);
+ sqlite3VdbeAddOp3(v, OP_Count, iIdxCur, regTemp,
+ OptimizationDisabled(db, SQLITE_Stat4));
sqlite3VdbeAddFunctionCall(pParse, 0, regStat+1, regStat, 4,
&statInitFuncdef, 0);
+ addrGotoEnd = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur);
+ VdbeCoverage(v);
- /* Implementation of the following:
- **
- ** Rewind csr
- ** if eof(csr) goto end_of_scan;
- ** regChng = 0
- ** goto next_push_0;
- **
- */
sqlite3VdbeAddOp2(v, OP_Integer, 0, regChng);
addrNextRow = sqlite3VdbeCurrentAddr(v);
@@ -121077,6 +121863,12 @@ static void analyzeOneTable(
}
/* Add the entry to the stat1 table. */
+ if( pIdx->pPartIdxWhere ){
+ /* Partial indexes might get a zero-entry in sqlite_stat1. But
+ ** an empty table is omitted from sqlite_stat1. */
+ sqlite3VdbeJumpHere(v, addrGotoEnd);
+ addrGotoEnd = 0;
+ }
callStatGet(pParse, regStat, STAT_GET_STAT1, regStat1);
assert( "BBB"[0]==SQLITE_AFF_TEXT );
sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "BBB", 0);
@@ -121100,6 +121892,13 @@ static void analyzeOneTable(
int addrIsNull;
u8 seekOp = HasRowid(pTab) ? OP_NotExists : OP_NotFound;
+ /* No STAT4 data is generated if the number of rows is zero */
+ if( addrGotoEnd==0 ){
+ sqlite3VdbeAddOp2(v, OP_Cast, regStat1, SQLITE_AFF_INTEGER);
+ addrGotoEnd = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1);
+ VdbeCoverage(v);
+ }
+
if( doOnce ){
int mxCol = nCol;
Index *pX;
@@ -121152,7 +121951,7 @@ static void analyzeOneTable(
#endif /* SQLITE_ENABLE_STAT4 */
/* End of analysis */
- sqlite3VdbeJumpHere(v, addrRewind);
+ if( addrGotoEnd ) sqlite3VdbeJumpHere(v, addrGotoEnd);
}
@@ -122939,7 +123738,7 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
}
sqlite3VdbeAddOp0(v, OP_Halt);
-#if SQLITE_USER_AUTHENTICATION
+#if SQLITE_USER_AUTHENTICATION && !defined(SQLITE_OMIT_SHARED_CACHE)
if( pParse->nTableLock>0 && db->init.busy==0 ){
sqlite3UserAuthInit(db);
if( db->auth.authLevelrc = SQLITE_ERROR;
pParse->nErr++;
return;
}
+ iCsr = pParse->nTab++;
regYield = ++pParse->nMem;
regRec = ++pParse->nMem;
regRowid = ++pParse->nMem;
- assert(pParse->nTab==1);
sqlite3MayAbort(pParse);
- sqlite3VdbeAddOp3(v, OP_OpenWrite, 1, pParse->regRoot, iDb);
+ sqlite3VdbeAddOp3(v, OP_OpenWrite, iCsr, pParse->regRoot, iDb);
sqlite3VdbeChangeP5(v, OPFLAG_P2ISREG);
- pParse->nTab = 2;
addrTop = sqlite3VdbeCurrentAddr(v) + 1;
sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop);
if( pParse->nErr ) return;
@@ -125621,11 +126420,11 @@ SQLITE_PRIVATE void sqlite3EndTable(
VdbeCoverage(v);
sqlite3VdbeAddOp3(v, OP_MakeRecord, dest.iSdst, dest.nSdst, regRec);
sqlite3TableAffinity(v, p, 0);
- sqlite3VdbeAddOp2(v, OP_NewRowid, 1, regRowid);
- sqlite3VdbeAddOp3(v, OP_Insert, 1, regRec, regRowid);
+ sqlite3VdbeAddOp2(v, OP_NewRowid, iCsr, regRowid);
+ sqlite3VdbeAddOp3(v, OP_Insert, iCsr, regRec, regRowid);
sqlite3VdbeGoto(v, addrInsLoop);
sqlite3VdbeJumpHere(v, addrInsLoop);
- sqlite3VdbeAddOp1(v, OP_Close, 1);
+ sqlite3VdbeAddOp1(v, OP_Close, iCsr);
}
/* Compute the complete text of the CREATE statement */
@@ -125682,13 +126481,10 @@ SQLITE_PRIVATE void sqlite3EndTable(
/* Test for cycles in generated columns and illegal expressions
** in CHECK constraints and in DEFAULT clauses. */
if( p->tabFlags & TF_HasGenerated ){
- sqlite3VdbeAddOp4(v, OP_SqlExec, 1, 0, 0,
+ sqlite3VdbeAddOp4(v, OP_SqlExec, 0x0001, 0, 0,
sqlite3MPrintf(db, "SELECT*FROM\"%w\".\"%w\"",
db->aDb[iDb].zDbSName, p->zName), P4_DYNAMIC);
}
- sqlite3VdbeAddOp4(v, OP_SqlExec, 1, 0, 0,
- sqlite3MPrintf(db, "PRAGMA \"%w\".integrity_check(%Q)",
- db->aDb[iDb].zDbSName, p->zName), P4_DYNAMIC);
}
/* Add the table to the in-memory representation of the database.
@@ -125765,9 +126561,12 @@ SQLITE_PRIVATE void sqlite3CreateView(
** on a view, even though views do not have rowids. The following flag
** setting fixes this problem. But the fix can be disabled by compiling
** with -DSQLITE_ALLOW_ROWID_IN_VIEW in case there are legacy apps that
- ** depend upon the old buggy behavior. */
-#ifndef SQLITE_ALLOW_ROWID_IN_VIEW
- p->tabFlags |= TF_NoVisibleRowid;
+ ** depend upon the old buggy behavior. The ability can also be toggled
+ ** using sqlite3_config(SQLITE_CONFIG_ROWID_IN_VIEW,...) */
+#ifdef SQLITE_ALLOW_ROWID_IN_VIEW
+ p->tabFlags |= sqlite3Config.mNoVisibleRowid; /* Optional. Allow by default */
+#else
+ p->tabFlags |= TF_NoVisibleRowid; /* Never allow rowid in view */
#endif
sqlite3TwoPartName(pParse, pName1, pName2, &pName);
@@ -125823,8 +126622,9 @@ SQLITE_PRIVATE void sqlite3CreateView(
#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
/*
** The Table structure pTable is really a VIEW. Fill in the names of
-** the columns of the view in the pTable structure. Return the number
-** of errors. If an error is seen leave an error message in pParse->zErrMsg.
+** the columns of the view in the pTable structure. Return non-zero if
+** there are errors. If an error is seen an error message is left
+** in pParse->zErrMsg.
*/
static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){
Table *pSelTab; /* A fake table from which we get the result set */
@@ -125947,7 +126747,7 @@ static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){
sqlite3DeleteColumnNames(db, pTable);
}
#endif /* SQLITE_OMIT_VIEW */
- return nErr;
+ return nErr + pParse->nErr;
}
SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
assert( pTable!=0 );
@@ -131377,13 +132177,13 @@ SQLITE_PRIVATE void sqlite3QuoteValue(StrAccum *pStr, sqlite3_value *pValue){
double r1, r2;
const char *zVal;
r1 = sqlite3_value_double(pValue);
- sqlite3_str_appendf(pStr, "%!.15g", r1);
+ sqlite3_str_appendf(pStr, "%!0.15g", r1);
zVal = sqlite3_str_value(pStr);
if( zVal ){
sqlite3AtoF(zVal, &r2, pStr->nChar, SQLITE_UTF8);
if( r1!=r2 ){
sqlite3_str_reset(pStr);
- sqlite3_str_appendf(pStr, "%!.20e", r1);
+ sqlite3_str_appendf(pStr, "%!0.20e", r1);
}
}
break;
@@ -131685,7 +132485,7 @@ static void replaceFunc(
}
if( zPattern[0]==0 ){
assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
- sqlite3_result_value(context, argv[0]);
+ sqlite3_result_text(context, (const char*)zStr, nStr, SQLITE_TRANSIENT);
return;
}
nPattern = sqlite3_value_bytes(argv[1]);
@@ -132168,7 +132968,7 @@ static void sumFinalize(sqlite3_context *context){
if( p->approx ){
if( p->ovrfl ){
sqlite3_result_error(context,"integer overflow",-1);
- }else if( !sqlite3IsNaN(p->rErr) ){
+ }else if( !sqlite3IsOverflow(p->rErr) ){
sqlite3_result_double(context, p->rSum+p->rErr);
}else{
sqlite3_result_double(context, p->rSum);
@@ -132185,7 +132985,7 @@ static void avgFinalize(sqlite3_context *context){
double r;
if( p->approx ){
r = p->rSum;
- if( !sqlite3IsNaN(p->rErr) ) r += p->rErr;
+ if( !sqlite3IsOverflow(p->rErr) ) r += p->rErr;
}else{
r = (double)(p->iSum);
}
@@ -132199,7 +132999,7 @@ static void totalFinalize(sqlite3_context *context){
if( p ){
if( p->approx ){
r = p->rSum;
- if( !sqlite3IsNaN(p->rErr) ) r += p->rErr;
+ if( !sqlite3IsOverflow(p->rErr) ) r += p->rErr;
}else{
r = (double)(p->iSum);
}
@@ -132482,6 +133282,8 @@ static void groupConcatValue(sqlite3_context *context){
sqlite3_result_error_toobig(context);
}else if( pAccum->accError==SQLITE_NOMEM ){
sqlite3_result_error_nomem(context);
+ }else if( pGCC->nAccum>0 && pAccum->nChar==0 ){
+ sqlite3_result_text(context, "", 1, SQLITE_STATIC);
}else{
const char *zText = sqlite3_str_value(pAccum);
sqlite3_result_text(context, zText, pAccum->nChar, SQLITE_TRANSIENT);
@@ -135230,6 +136032,196 @@ SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){
# define autoIncStep(A,B,C)
#endif /* SQLITE_OMIT_AUTOINCREMENT */
+/*
+** If argument pVal is a Select object returned by an sqlite3MultiValues()
+** that was able to use the co-routine optimization, finish coding the
+** co-routine.
+*/
+SQLITE_PRIVATE void sqlite3MultiValuesEnd(Parse *pParse, Select *pVal){
+ if( ALWAYS(pVal) && pVal->pSrc->nSrc>0 ){
+ SrcItem *pItem = &pVal->pSrc->a[0];
+ sqlite3VdbeEndCoroutine(pParse->pVdbe, pItem->regReturn);
+ sqlite3VdbeJumpHere(pParse->pVdbe, pItem->addrFillSub - 1);
+ }
+}
+
+/*
+** Return true if all expressions in the expression-list passed as the
+** only argument are constant.
+*/
+static int exprListIsConstant(Parse *pParse, ExprList *pRow){
+ int ii;
+ for(ii=0; iinExpr; ii++){
+ if( 0==sqlite3ExprIsConstant(pParse, pRow->a[ii].pExpr) ) return 0;
+ }
+ return 1;
+}
+
+/*
+** Return true if all expressions in the expression-list passed as the
+** only argument are both constant and have no affinity.
+*/
+static int exprListIsNoAffinity(Parse *pParse, ExprList *pRow){
+ int ii;
+ if( exprListIsConstant(pParse,pRow)==0 ) return 0;
+ for(ii=0; iinExpr; ii++){
+ Expr *pExpr = pRow->a[ii].pExpr;
+ assert( pExpr->op!=TK_RAISE );
+ assert( pExpr->affExpr==0 );
+ if( 0!=sqlite3ExprAffinity(pExpr) ) return 0;
+ }
+ return 1;
+
+}
+
+/*
+** This function is called by the parser for the second and subsequent
+** rows of a multi-row VALUES clause. Argument pLeft is the part of
+** the VALUES clause already parsed, argument pRow is the vector of values
+** for the new row. The Select object returned represents the complete
+** VALUES clause, including the new row.
+**
+** There are two ways in which this may be achieved - by incremental
+** coding of a co-routine (the "co-routine" method) or by returning a
+** Select object equivalent to the following (the "UNION ALL" method):
+**
+** "pLeft UNION ALL SELECT pRow"
+**
+** If the VALUES clause contains a lot of rows, this compound Select
+** object may consume a lot of memory.
+**
+** When the co-routine method is used, each row that will be returned
+** by the VALUES clause is coded into part of a co-routine as it is
+** passed to this function. The returned Select object is equivalent to:
+**
+** SELECT * FROM (
+** Select object to read co-routine
+** )
+**
+** The co-routine method is used in most cases. Exceptions are:
+**
+** a) If the current statement has a WITH clause. This is to avoid
+** statements like:
+**
+** WITH cte AS ( VALUES('x'), ('y') ... )
+** SELECT * FROM cte AS a, cte AS b;
+**
+** This will not work, as the co-routine uses a hard-coded register
+** for its OP_Yield instructions, and so it is not possible for two
+** cursors to iterate through it concurrently.
+**
+** b) The schema is currently being parsed (i.e. the VALUES clause is part
+** of a schema item like a VIEW or TRIGGER). In this case there is no VM
+** being generated when parsing is taking place, and so generating
+** a co-routine is not possible.
+**
+** c) There are non-constant expressions in the VALUES clause (e.g.
+** the VALUES clause is part of a correlated sub-query).
+**
+** d) One or more of the values in the first row of the VALUES clause
+** has an affinity (i.e. is a CAST expression). This causes problems
+** because the complex rules SQLite uses (see function
+** sqlite3SubqueryColumnTypes() in select.c) to determine the effective
+** affinity of such a column for all rows require access to all values in
+** the column simultaneously.
+*/
+SQLITE_PRIVATE Select *sqlite3MultiValues(Parse *pParse, Select *pLeft, ExprList *pRow){
+
+ if( pParse->bHasWith /* condition (a) above */
+ || pParse->db->init.busy /* condition (b) above */
+ || exprListIsConstant(pParse,pRow)==0 /* condition (c) above */
+ || (pLeft->pSrc->nSrc==0 &&
+ exprListIsNoAffinity(pParse,pLeft->pEList)==0) /* condition (d) above */
+ || IN_SPECIAL_PARSE
+ ){
+ /* The co-routine method cannot be used. Fall back to UNION ALL. */
+ Select *pSelect = 0;
+ int f = SF_Values | SF_MultiValue;
+ if( pLeft->pSrc->nSrc ){
+ sqlite3MultiValuesEnd(pParse, pLeft);
+ f = SF_Values;
+ }else if( pLeft->pPrior ){
+ /* In this case set the SF_MultiValue flag only if it was set on pLeft */
+ f = (f & pLeft->selFlags);
+ }
+ pSelect = sqlite3SelectNew(pParse, pRow, 0, 0, 0, 0, 0, f, 0);
+ pLeft->selFlags &= ~SF_MultiValue;
+ if( pSelect ){
+ pSelect->op = TK_ALL;
+ pSelect->pPrior = pLeft;
+ pLeft = pSelect;
+ }
+ }else{
+ SrcItem *p = 0; /* SrcItem that reads from co-routine */
+
+ if( pLeft->pSrc->nSrc==0 ){
+ /* Co-routine has not yet been started and the special Select object
+ ** that accesses the co-routine has not yet been created. This block
+ ** does both those things. */
+ Vdbe *v = sqlite3GetVdbe(pParse);
+ Select *pRet = sqlite3SelectNew(pParse, 0, 0, 0, 0, 0, 0, 0, 0);
+
+ /* Ensure the database schema has been read. This is to ensure we have
+ ** the correct text encoding. */
+ if( (pParse->db->mDbFlags & DBFLAG_SchemaKnownOk)==0 ){
+ sqlite3ReadSchema(pParse);
+ }
+
+ if( pRet ){
+ SelectDest dest;
+ pRet->pSrc->nSrc = 1;
+ pRet->pPrior = pLeft->pPrior;
+ pRet->op = pLeft->op;
+ if( pRet->pPrior ) pRet->selFlags |= SF_Values;
+ pLeft->pPrior = 0;
+ pLeft->op = TK_SELECT;
+ assert( pLeft->pNext==0 );
+ assert( pRet->pNext==0 );
+ p = &pRet->pSrc->a[0];
+ p->pSelect = pLeft;
+ p->fg.viaCoroutine = 1;
+ p->addrFillSub = sqlite3VdbeCurrentAddr(v) + 1;
+ p->regReturn = ++pParse->nMem;
+ p->iCursor = -1;
+ p->u1.nRow = 2;
+ sqlite3VdbeAddOp3(v,OP_InitCoroutine,p->regReturn,0,p->addrFillSub);
+ sqlite3SelectDestInit(&dest, SRT_Coroutine, p->regReturn);
+
+ /* Allocate registers for the output of the co-routine. Do so so
+ ** that there are two unused registers immediately before those
+ ** used by the co-routine. This allows the code in sqlite3Insert()
+ ** to use these registers directly, instead of copying the output
+ ** of the co-routine to a separate array for processing. */
+ dest.iSdst = pParse->nMem + 3;
+ dest.nSdst = pLeft->pEList->nExpr;
+ pParse->nMem += 2 + dest.nSdst;
+
+ pLeft->selFlags |= SF_MultiValue;
+ sqlite3Select(pParse, pLeft, &dest);
+ p->regResult = dest.iSdst;
+ assert( pParse->nErr || dest.iSdst>0 );
+ pLeft = pRet;
+ }
+ }else{
+ p = &pLeft->pSrc->a[0];
+ assert( !p->fg.isTabFunc && !p->fg.isIndexedBy );
+ p->u1.nRow++;
+ }
+
+ if( pParse->nErr==0 ){
+ assert( p!=0 );
+ if( p->pSelect->pEList->nExpr!=pRow->nExpr ){
+ sqlite3SelectWrongNumTermsError(pParse, p->pSelect);
+ }else{
+ sqlite3ExprCodeExprList(pParse, pRow, p->regResult, 0, 0);
+ sqlite3VdbeAddOp1(pParse->pVdbe, OP_Yield, p->regReturn);
+ }
+ }
+ sqlite3ExprListDelete(pParse->db, pRow);
+ }
+
+ return pLeft;
+}
/* Forward declaration */
static int xferOptimization(
@@ -135569,25 +136561,40 @@ SQLITE_PRIVATE void sqlite3Insert(
if( pSelect ){
/* Data is coming from a SELECT or from a multi-row VALUES clause.
** Generate a co-routine to run the SELECT. */
- int regYield; /* Register holding co-routine entry-point */
- int addrTop; /* Top of the co-routine */
int rc; /* Result code */
- regYield = ++pParse->nMem;
- addrTop = sqlite3VdbeCurrentAddr(v) + 1;
- sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop);
- sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield);
- dest.iSdst = bIdListInOrder ? regData : 0;
- dest.nSdst = pTab->nCol;
- rc = sqlite3Select(pParse, pSelect, &dest);
- regFromSelect = dest.iSdst;
- assert( db->pParse==pParse );
- if( rc || pParse->nErr ) goto insert_cleanup;
- assert( db->mallocFailed==0 );
- sqlite3VdbeEndCoroutine(v, regYield);
- sqlite3VdbeJumpHere(v, addrTop - 1); /* label B: */
- assert( pSelect->pEList );
- nColumn = pSelect->pEList->nExpr;
+ if( pSelect->pSrc->nSrc==1
+ && pSelect->pSrc->a[0].fg.viaCoroutine
+ && pSelect->pPrior==0
+ ){
+ SrcItem *pItem = &pSelect->pSrc->a[0];
+ dest.iSDParm = pItem->regReturn;
+ regFromSelect = pItem->regResult;
+ nColumn = pItem->pSelect->pEList->nExpr;
+ ExplainQueryPlan((pParse, 0, "SCAN %S", pItem));
+ if( bIdListInOrder && nColumn==pTab->nCol ){
+ regData = regFromSelect;
+ regRowid = regData - 1;
+ regIns = regRowid - (IsVirtual(pTab) ? 1 : 0);
+ }
+ }else{
+ int addrTop; /* Top of the co-routine */
+ int regYield = ++pParse->nMem;
+ addrTop = sqlite3VdbeCurrentAddr(v) + 1;
+ sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop);
+ sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield);
+ dest.iSdst = bIdListInOrder ? regData : 0;
+ dest.nSdst = pTab->nCol;
+ rc = sqlite3Select(pParse, pSelect, &dest);
+ regFromSelect = dest.iSdst;
+ assert( db->pParse==pParse );
+ if( rc || pParse->nErr ) goto insert_cleanup;
+ assert( db->mallocFailed==0 );
+ sqlite3VdbeEndCoroutine(v, regYield);
+ sqlite3VdbeJumpHere(v, addrTop - 1); /* label B: */
+ assert( pSelect->pEList );
+ nColumn = pSelect->pEList->nExpr;
+ }
/* Set useTempTable to TRUE if the result of the SELECT statement
** should be written into a temporary table (template 4). Set to
@@ -135742,7 +136749,7 @@ SQLITE_PRIVATE void sqlite3Insert(
pNx->iDataCur = iDataCur;
pNx->iIdxCur = iIdxCur;
if( pNx->pUpsertTarget ){
- if( sqlite3UpsertAnalyzeTarget(pParse, pTabList, pNx) ){
+ if( sqlite3UpsertAnalyzeTarget(pParse, pTabList, pNx, pUpsert) ){
goto insert_cleanup;
}
}
@@ -137663,7 +138670,10 @@ static int xferOptimization(
}
}
#ifndef SQLITE_OMIT_CHECK
- if( pDest->pCheck && sqlite3ExprListCompare(pSrc->pCheck,pDest->pCheck,-1) ){
+ if( pDest->pCheck
+ && (db->mDbFlags & DBFLAG_Vacuum)==0
+ && sqlite3ExprListCompare(pSrc->pCheck,pDest->pCheck,-1)
+ ){
return 0; /* Tables have different CHECK constraints. Ticket #2252 */
}
#endif
@@ -140365,6 +141375,34 @@ static const PragmaName aPragmaName[] = {
/************** End of pragma.h **********************************************/
/************** Continuing where we left off in pragma.c *********************/
+/*
+** When the 0x10 bit of PRAGMA optimize is set, any ANALYZE commands
+** will be run with an analysis_limit set to the lessor of the value of
+** the following macro or to the actual analysis_limit if it is non-zero,
+** in order to prevent PRAGMA optimize from running for too long.
+**
+** The value of 2000 is chosen emperically so that the worst-case run-time
+** for PRAGMA optimize does not exceed 100 milliseconds against a variety
+** of test databases on a RaspberryPI-4 compiled using -Os and without
+** -DSQLITE_DEBUG. Of course, your mileage may vary. For the purpose of
+** this paragraph, "worst-case" means that ANALYZE ends up being
+** run on every table in the database. The worst case typically only
+** happens if PRAGMA optimize is run on a database file for which ANALYZE
+** has not been previously run and the 0x10000 flag is included so that
+** all tables are analyzed. The usual case for PRAGMA optimize is that
+** no ANALYZE commands will be run at all, or if any ANALYZE happens it
+** will be against a single table, so that expected timing for PRAGMA
+** optimize on a PI-4 is more like 1 millisecond or less with the 0x10000
+** flag or less than 100 microseconds without the 0x10000 flag.
+**
+** An analysis limit of 2000 is almost always sufficient for the query
+** planner to fully characterize an index. The additional accuracy from
+** a larger analysis is not usually helpful.
+*/
+#ifndef SQLITE_DEFAULT_OPTIMIZE_LIMIT
+# define SQLITE_DEFAULT_OPTIMIZE_LIMIT 2000
+#endif
+
/*
** Interpret the given string as a safety level. Return 0 for OFF,
** 1 for ON or NORMAL, 2 for FULL, and 3 for EXTRA. Return 1 for an empty or
@@ -142019,7 +143057,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
/* Set the maximum error count */
mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
if( zRight ){
- if( sqlite3GetInt32(zRight, &mxErr) ){
+ if( sqlite3GetInt32(pValue->z, &mxErr) ){
if( mxErr<=0 ){
mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
}
@@ -142036,7 +143074,6 @@ SQLITE_PRIVATE void sqlite3Pragma(
Hash *pTbls; /* Set of all tables in the schema */
int *aRoot; /* Array of root page numbers of all btrees */
int cnt = 0; /* Number of entries in aRoot[] */
- int mxIdx = 0; /* Maximum number of indexes for any table */
if( OMIT_TEMPDB && i==1 ) continue;
if( iDb>=0 && i!=iDb ) continue;
@@ -142058,7 +143095,6 @@ SQLITE_PRIVATE void sqlite3Pragma(
if( pObjTab && pObjTab!=pTab ) continue;
if( HasRowid(pTab) ) cnt++;
for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ cnt++; }
- if( nIdx>mxIdx ) mxIdx = nIdx;
}
if( cnt==0 ) continue;
if( pObjTab ) cnt++;
@@ -142078,11 +143114,11 @@ SQLITE_PRIVATE void sqlite3Pragma(
aRoot[0] = cnt;
/* Make sure sufficient number of registers have been allocated */
- sqlite3TouchRegister(pParse, 8+mxIdx);
+ sqlite3TouchRegister(pParse, 8+cnt);
sqlite3ClearTempRegCache(pParse);
/* Do the b-tree integrity checks */
- sqlite3VdbeAddOp4(v, OP_IntegrityCk, 2, cnt, 1, (char*)aRoot,P4_INTARRAY);
+ sqlite3VdbeAddOp4(v, OP_IntegrityCk, 1, cnt, 8, (char*)aRoot,P4_INTARRAY);
sqlite3VdbeChangeP5(v, (u8)i);
addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2); VdbeCoverage(v);
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
@@ -142092,6 +143128,36 @@ SQLITE_PRIVATE void sqlite3Pragma(
integrityCheckResultRow(v);
sqlite3VdbeJumpHere(v, addr);
+ /* Check that the indexes all have the right number of rows */
+ cnt = pObjTab ? 1 : 0;
+ sqlite3VdbeLoadString(v, 2, "wrong # of entries in index ");
+ for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
+ int iTab = 0;
+ Table *pTab = sqliteHashData(x);
+ Index *pIdx;
+ if( pObjTab && pObjTab!=pTab ) continue;
+ if( HasRowid(pTab) ){
+ iTab = cnt++;
+ }else{
+ iTab = cnt;
+ for(pIdx=pTab->pIndex; ALWAYS(pIdx); pIdx=pIdx->pNext){
+ if( IsPrimaryKeyIndex(pIdx) ) break;
+ iTab++;
+ }
+ }
+ for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
+ if( pIdx->pPartIdxWhere==0 && !IsVectorIndex(pIdx) ){
+ addr = sqlite3VdbeAddOp3(v, OP_Eq, 8+cnt, 0, 8+iTab);
+ VdbeCoverageNeverNull(v);
+ sqlite3VdbeLoadString(v, 4, pIdx->zName);
+ sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3);
+ integrityCheckResultRow(v);
+ sqlite3VdbeJumpHere(v, addr);
+ }
+ cnt++;
+ }
+ }
+
/* Make sure all the indices are constructed correctly.
*/
for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
@@ -142106,31 +143172,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
int mxCol; /* Maximum non-virtual column number */
if( pObjTab && pObjTab!=pTab ) continue;
- if( !IsOrdinaryTable(pTab) ){
-#ifndef SQLITE_OMIT_VIRTUALTABLE
- sqlite3_vtab *pVTab;
- int a1;
- if( !IsVirtual(pTab) ) continue;
- if( pTab->nCol<=0 ){
- const char *zMod = pTab->u.vtab.azArg[0];
- if( sqlite3HashFind(&db->aModule, zMod)==0 ) continue;
- }
- sqlite3ViewGetColumnNames(pParse, pTab);
- if( pTab->u.vtab.p==0 ) continue;
- pVTab = pTab->u.vtab.p->pVtab;
- if( NEVER(pVTab==0) ) continue;
- if( NEVER(pVTab->pModule==0) ) continue;
- if( pVTab->pModule->iVersion<4 ) continue;
- if( pVTab->pModule->xIntegrity==0 ) continue;
- sqlite3VdbeAddOp3(v, OP_VCheck, i, 3, isQuick);
- pTab->nTabRef++;
- sqlite3VdbeAppendP4(v, pTab, P4_TABLEREF);
- a1 = sqlite3VdbeAddOp1(v, OP_IsNull, 3); VdbeCoverage(v);
- integrityCheckResultRow(v);
- sqlite3VdbeJumpHere(v, a1);
-#endif
- continue;
- }
+ if( !IsOrdinaryTable(pTab) ) continue;
if( isQuick || HasRowid(pTab) ){
pPk = 0;
r2 = 0;
@@ -142265,6 +143307,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
** is REAL, we have to load the actual data using OP_Column
** to reliably determine if the value is a NULL. */
sqlite3VdbeAddOp3(v, OP_Column, p1, p3, 3);
+ sqlite3ColumnDefault(v, pTab, j, 3);
jmp3 = sqlite3VdbeAddOp2(v, OP_NotNull, 3, labelOk);
VdbeCoverage(v);
}
@@ -142439,24 +143482,43 @@ SQLITE_PRIVATE void sqlite3Pragma(
}
sqlite3VdbeAddOp2(v, OP_Next, iDataCur, loopTop); VdbeCoverage(v);
sqlite3VdbeJumpHere(v, loopTop-1);
- if( !isQuick ){
- sqlite3VdbeLoadString(v, 2, "wrong # of entries in index ");
- for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
- if( pPk==pIdx ) continue;
- if( IsVectorIndex(pIdx) ) continue;
- sqlite3VdbeAddOp2(v, OP_Count, iIdxCur+j, 3);
- addr = sqlite3VdbeAddOp3(v, OP_Eq, 8+j, 0, 3); VdbeCoverage(v);
- sqlite3VdbeChangeP5(v, SQLITE_NOTNULL);
- sqlite3VdbeLoadString(v, 4, pIdx->zName);
- sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3);
- integrityCheckResultRow(v);
- sqlite3VdbeJumpHere(v, addr);
- }
- if( pPk ){
- sqlite3ReleaseTempRange(pParse, r2, pPk->nKeyCol);
- }
+ if( pPk ){
+ assert( !isQuick );
+ sqlite3ReleaseTempRange(pParse, r2, pPk->nKeyCol);
}
}
+
+#ifndef SQLITE_OMIT_VIRTUALTABLE
+ /* Second pass to invoke the xIntegrity method on all virtual
+ ** tables.
+ */
+ for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
+ Table *pTab = sqliteHashData(x);
+ sqlite3_vtab *pVTab;
+ int a1;
+ if( pObjTab && pObjTab!=pTab ) continue;
+ if( IsOrdinaryTable(pTab) ) continue;
+ if( !IsVirtual(pTab) ) continue;
+ if( pTab->nCol<=0 ){
+ const char *zMod = pTab->u.vtab.azArg[0];
+ if( sqlite3HashFind(&db->aModule, zMod)==0 ) continue;
+ }
+ sqlite3ViewGetColumnNames(pParse, pTab);
+ if( pTab->u.vtab.p==0 ) continue;
+ pVTab = pTab->u.vtab.p->pVtab;
+ if( NEVER(pVTab==0) ) continue;
+ if( NEVER(pVTab->pModule==0) ) continue;
+ if( pVTab->pModule->iVersion<4 ) continue;
+ if( pVTab->pModule->xIntegrity==0 ) continue;
+ sqlite3VdbeAddOp3(v, OP_VCheck, i, 3, isQuick);
+ pTab->nTabRef++;
+ sqlite3VdbeAppendP4(v, pTab, P4_TABLEREF);
+ a1 = sqlite3VdbeAddOp1(v, OP_IsNull, 3); VdbeCoverage(v);
+ integrityCheckResultRow(v);
+ sqlite3VdbeJumpHere(v, a1);
+ continue;
+ }
+#endif
}
{
static const int iLn = VDBE_OFFSET_LINENO(2);
@@ -142720,44 +143782,63 @@ SQLITE_PRIVATE void sqlite3Pragma(
**
** The optional argument is a bitmask of optimizations to perform:
**
- ** 0x0001 Debugging mode. Do not actually perform any optimizations
- ** but instead return one line of text for each optimization
- ** that would have been done. Off by default.
+ ** 0x00001 Debugging mode. Do not actually perform any optimizations
+ ** but instead return one line of text for each optimization
+ ** that would have been done. Off by default.
**
- ** 0x0002 Run ANALYZE on tables that might benefit. On by default.
- ** See below for additional information.
+ ** 0x00002 Run ANALYZE on tables that might benefit. On by default.
+ ** See below for additional information.
**
- ** 0x0004 (Not yet implemented) Record usage and performance
- ** information from the current session in the
- ** database file so that it will be available to "optimize"
- ** pragmas run by future database connections.
+ ** 0x00010 Run all ANALYZE operations using an analysis_limit that
+ ** is the lessor of the current analysis_limit and the
+ ** SQLITE_DEFAULT_OPTIMIZE_LIMIT compile-time option.
+ ** The default value of SQLITE_DEFAULT_OPTIMIZE_LIMIT is
+ ** currently (2024-02-19) set to 2000, which is such that
+ ** the worst case run-time for PRAGMA optimize on a 100MB
+ ** database will usually be less than 100 milliseconds on
+ ** a RaspberryPI-4 class machine. On by default.
**
- ** 0x0008 (Not yet implemented) Create indexes that might have
- ** been helpful to recent queries
+ ** 0x10000 Look at tables to see if they need to be reanalyzed
+ ** due to growth or shrinkage even if they have not been
+ ** queried during the current connection. Off by default.
**
- ** The default MASK is and always shall be 0xfffe. 0xfffe means perform all
- ** of the optimizations listed above except Debug Mode, including new
- ** optimizations that have not yet been invented. If new optimizations are
- ** ever added that should be off by default, those off-by-default
- ** optimizations will have bitmasks of 0x10000 or larger.
+ ** The default MASK is and always shall be 0x0fffe. In the current
+ ** implementation, the default mask only covers the 0x00002 optimization,
+ ** though additional optimizations that are covered by 0x0fffe might be
+ ** added in the future. Optimizations that are off by default and must
+ ** be explicitly requested have masks of 0x10000 or greater.
**
** DETERMINATION OF WHEN TO RUN ANALYZE
**
** In the current implementation, a table is analyzed if only if all of
** the following are true:
**
- ** (1) MASK bit 0x02 is set.
+ ** (1) MASK bit 0x00002 is set.
+ **
+ ** (2) The table is an ordinary table, not a virtual table or view.
**
- ** (2) The query planner used sqlite_stat1-style statistics for one or
- ** more indexes of the table at some point during the lifetime of
- ** the current connection.
+ ** (3) The table name does not begin with "sqlite_".
**
- ** (3) One or more indexes of the table are currently unanalyzed OR
- ** the number of rows in the table has increased by 25 times or more
- ** since the last time ANALYZE was run.
+ ** (4) One or more of the following is true:
+ ** (4a) The 0x10000 MASK bit is set.
+ ** (4b) One or more indexes on the table lacks an entry
+ ** in the sqlite_stat1 table.
+ ** (4c) The query planner used sqlite_stat1-style statistics for one
+ ** or more indexes of the table at some point during the lifetime
+ ** of the current connection.
+ **
+ ** (5) One or more of the following is true:
+ ** (5a) One or more indexes on the table lacks an entry
+ ** in the sqlite_stat1 table. (Same as 4a)
+ ** (5b) The number of rows in the table has increased or decreased by
+ ** 10-fold. In other words, the current size of the table is
+ ** 10 times larger than the size in sqlite_stat1 or else the
+ ** current size is less than 1/10th the size in sqlite_stat1.
**
** The rules for when tables are analyzed are likely to change in
- ** future releases.
+ ** future releases. Future versions of SQLite might accept a string
+ ** literal argument to this pragma that contains a mnemonic description
+ ** of the options rather than a bitmap.
*/
case PragTyp_OPTIMIZE: {
int iDbLast; /* Loop termination point for the schema loop */
@@ -142769,6 +143850,10 @@ SQLITE_PRIVATE void sqlite3Pragma(
LogEst szThreshold; /* Size threshold above which reanalysis needed */
char *zSubSql; /* SQL statement for the OP_SqlExec opcode */
u32 opMask; /* Mask of operations to perform */
+ int nLimit; /* Analysis limit to use */
+ int nCheck = 0; /* Number of tables to be optimized */
+ int nBtree = 0; /* Number of btrees to scan */
+ int nIndex; /* Number of indexes on the current table */
if( zRight ){
opMask = (u32)sqlite3Atoi(zRight);
@@ -142776,6 +143861,14 @@ SQLITE_PRIVATE void sqlite3Pragma(
}else{
opMask = 0xfffe;
}
+ if( (opMask & 0x10)==0 ){
+ nLimit = 0;
+ }else if( db->nAnalysisLimit>0
+ && db->nAnalysisLimitnTab++;
for(iDbLast = zDb?iDb:db->nDb-1; iDb<=iDbLast; iDb++){
if( iDb==1 ) continue;
@@ -142784,23 +143877,61 @@ SQLITE_PRIVATE void sqlite3Pragma(
for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){
pTab = (Table*)sqliteHashData(k);
- /* If table pTab has not been used in a way that would benefit from
- ** having analysis statistics during the current session, then skip it.
- ** This also has the effect of skipping virtual tables and views */
- if( (pTab->tabFlags & TF_StatsUsed)==0 ) continue;
+ /* This only works for ordinary tables */
+ if( !IsOrdinaryTable(pTab) ) continue;
- /* Reanalyze if the table is 25 times larger than the last analysis */
- szThreshold = pTab->nRowLogEst + 46; assert( sqlite3LogEst(25)==46 );
+ /* Do not scan system tables */
+ if( 0==sqlite3StrNICmp(pTab->zName, "sqlite_", 7) ) continue;
+
+ /* Find the size of the table as last recorded in sqlite_stat1.
+ ** If any index is unanalyzed, then the threshold is -1 to
+ ** indicate a new, unanalyzed index
+ */
+ szThreshold = pTab->nRowLogEst;
+ nIndex = 0;
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
+ nIndex++;
if( !pIdx->hasStat1 ){
- szThreshold = 0; /* Always analyze if any index lacks statistics */
- break;
+ szThreshold = -1; /* Always analyze if any index lacks statistics */
}
}
- if( szThreshold ){
- sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead);
- sqlite3VdbeAddOp3(v, OP_IfSmaller, iTabCur,
- sqlite3VdbeCurrentAddr(v)+2+(opMask&1), szThreshold);
+
+ /* If table pTab has not been used in a way that would benefit from
+ ** having analysis statistics during the current session, then skip it,
+ ** unless the 0x10000 MASK bit is set. */
+ if( (pTab->tabFlags & TF_MaybeReanalyze)!=0 ){
+ /* Check for size change if stat1 has been used for a query */
+ }else if( opMask & 0x10000 ){
+ /* Check for size change if 0x10000 is set */
+ }else if( pTab->pIndex!=0 && szThreshold<0 ){
+ /* Do analysis if unanalyzed indexes exists */
+ }else{
+ /* Otherwise, we can skip this table */
+ continue;
+ }
+
+ nCheck++;
+ if( nCheck==2 ){
+ /* If ANALYZE might be invoked two or more times, hold a write
+ ** transaction for efficiency */
+ sqlite3BeginWriteOperation(pParse, 0, iDb);
+ }
+ nBtree += nIndex+1;
+
+ /* Reanalyze if the table is 10 times larger or smaller than
+ ** the last analysis. Unconditional reanalysis if there are
+ ** unanalyzed indexes. */
+ sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead);
+ if( szThreshold>=0 ){
+ const LogEst iRange = 33; /* 10x size change */
+ sqlite3VdbeAddOp4Int(v, OP_IfSizeBetween, iTabCur,
+ sqlite3VdbeCurrentAddr(v)+2+(opMask&1),
+ szThreshold>=iRange ? szThreshold-iRange : -1,
+ szThreshold+iRange);
+ VdbeCoverage(v);
+ }else{
+ sqlite3VdbeAddOp2(v, OP_Rewind, iTabCur,
+ sqlite3VdbeCurrentAddr(v)+2+(opMask&1));
VdbeCoverage(v);
}
zSubSql = sqlite3MPrintf(db, "ANALYZE \"%w\".\"%w\"",
@@ -142810,11 +143941,27 @@ SQLITE_PRIVATE void sqlite3Pragma(
sqlite3VdbeAddOp4(v, OP_String8, 0, r1, 0, zSubSql, P4_DYNAMIC);
sqlite3VdbeAddOp2(v, OP_ResultRow, r1, 1);
}else{
- sqlite3VdbeAddOp4(v, OP_SqlExec, 0, 0, 0, zSubSql, P4_DYNAMIC);
+ sqlite3VdbeAddOp4(v, OP_SqlExec, nLimit ? 0x02 : 00, nLimit, 0,
+ zSubSql, P4_DYNAMIC);
}
}
}
sqlite3VdbeAddOp0(v, OP_Expire);
+
+ /* In a schema with a large number of tables and indexes, scale back
+ ** the analysis_limit to avoid excess run-time in the worst case.
+ */
+ if( !db->mallocFailed && nLimit>0 && nBtree>100 ){
+ int iAddr, iEnd;
+ VdbeOp *aOp;
+ nLimit = 100*nLimit/nBtree;
+ if( nLimit<100 ) nLimit = 100;
+ aOp = sqlite3VdbeGetOp(v, 0);
+ iEnd = sqlite3VdbeCurrentAddr(v);
+ for(iAddr=0; iAddrnConstraint; i++, pConstraint++){
- if( pConstraint->usable==0 ) continue;
- if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
if( pConstraint->iColumn < pTab->iHidden ) continue;
+ if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
+ if( pConstraint->usable==0 ) return SQLITE_CONSTRAINT;
j = pConstraint->iColumn - pTab->iHidden;
assert( j < 2 );
seen[j] = i+1;
@@ -143093,12 +144240,13 @@ static int pragmaVtabBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
j = seen[0]-1;
pIdxInfo->aConstraintUsage[j].argvIndex = 1;
pIdxInfo->aConstraintUsage[j].omit = 1;
- if( seen[1]==0 ) return SQLITE_OK;
pIdxInfo->estimatedCost = (double)20;
pIdxInfo->estimatedRows = 20;
- j = seen[1]-1;
- pIdxInfo->aConstraintUsage[j].argvIndex = 2;
- pIdxInfo->aConstraintUsage[j].omit = 1;
+ if( seen[1] ){
+ j = seen[1]-1;
+ pIdxInfo->aConstraintUsage[j].argvIndex = 2;
+ pIdxInfo->aConstraintUsage[j].omit = 1;
+ }
return SQLITE_OK;
}
@@ -143118,6 +144266,7 @@ static void pragmaVtabCursorClear(PragmaVtabCursor *pCsr){
int i;
sqlite3_finalize(pCsr->pPragma);
pCsr->pPragma = 0;
+ pCsr->iRowid = 0;
for(i=0; iazArg); i++){
sqlite3_free(pCsr->azArg[i]);
pCsr->azArg[i] = 0;
@@ -143918,7 +145067,13 @@ SQLITE_PRIVATE void *sqlite3ParserAddCleanup(
void (*xCleanup)(sqlite3*,void*), /* The cleanup routine */
void *pPtr /* Pointer to object to be cleaned up */
){
- ParseCleanup *pCleanup = sqlite3DbMallocRaw(pParse->db, sizeof(*pCleanup));
+ ParseCleanup *pCleanup;
+ if( sqlite3FaultSim(300) ){
+ pCleanup = 0;
+ sqlite3OomFault(pParse->db);
+ }else{
+ pCleanup = sqlite3DbMallocRaw(pParse->db, sizeof(*pCleanup));
+ }
if( pCleanup ){
pCleanup->pNext = pParse->pCleanup;
pParse->pCleanup = pCleanup;
@@ -146050,9 +147205,16 @@ static void generateSortTail(
int addrExplain; /* Address of OP_Explain instruction */
#endif
- ExplainQueryPlan2(addrExplain, (pParse, 0,
- "USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat>0?"RIGHT PART OF ":"")
- );
+ nKey = pOrderBy->nExpr - pSort->nOBSat;
+ if( pSort->nOBSat==0 || nKey==1 ){
+ ExplainQueryPlan2(addrExplain, (pParse, 0,
+ "USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat?"LAST TERM OF ":""
+ ));
+ }else{
+ ExplainQueryPlan2(addrExplain, (pParse, 0,
+ "USE TEMP B-TREE FOR LAST %d TERMS OF ORDER BY", nKey
+ ));
+ }
sqlite3VdbeScanStatusRange(v, addrExplain,pSort->addrPush,pSort->addrPushEnd);
sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, pSort->addrPush);
@@ -146090,7 +147252,6 @@ static void generateSortTail(
regRow = sqlite3GetTempRange(pParse, nColumn);
}
}
- nKey = pOrderBy->nExpr - pSort->nOBSat;
if( pSort->sortFlags & SORTFLAG_UseSorter ){
int regSortOut = ++pParse->nMem;
iSortTab = pParse->nTab++;
@@ -146330,11 +147491,7 @@ static const char *columnTypeImpl(
** data for the result-set column of the sub-select.
*/
if( iColpEList->nExpr
-#ifdef SQLITE_ALLOW_ROWID_IN_VIEW
- && iCol>=0
-#else
- && ALWAYS(iCol>=0)
-#endif
+ && (!ViewCanHaveRowid || iCol>=0)
){
/* If iCol is less than zero, then the expression requests the
** rowid of the sub-select or view. This expression is legal (see
@@ -146699,8 +147856,7 @@ SQLITE_PRIVATE void sqlite3SubqueryColumnTypes(
NameContext sNC;
assert( pSelect!=0 );
- testcase( (pSelect->selFlags & SF_Resolved)==0 );
- assert( (pSelect->selFlags & SF_Resolved)!=0 || IN_RENAME_OBJECT );
+ assert( (pSelect->selFlags & SF_Resolved)!=0 );
assert( pTab->nCol==pSelect->pEList->nExpr || pParse->nErr>0 );
assert( aff==SQLITE_AFF_NONE || aff==SQLITE_AFF_BLOB );
if( db->mallocFailed || IN_RENAME_OBJECT ) return;
@@ -146711,17 +147867,22 @@ SQLITE_PRIVATE void sqlite3SubqueryColumnTypes(
for(i=0, pCol=pTab->aCol; inCol; i++, pCol++){
const char *zType;
i64 n;
+ int m = 0;
+ Select *pS2 = pSelect;
pTab->tabFlags |= (pCol->colFlags & COLFLAG_NOINSERT);
p = a[i].pExpr;
/* pCol->szEst = ... // Column size est for SELECT tables never used */
pCol->affinity = sqlite3ExprAffinity(p);
+ while( pCol->affinity<=SQLITE_AFF_NONE && pS2->pNext!=0 ){
+ m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr);
+ pS2 = pS2->pNext;
+ pCol->affinity = sqlite3ExprAffinity(pS2->pEList->a[i].pExpr);
+ }
if( pCol->affinity<=SQLITE_AFF_NONE ){
pCol->affinity = aff;
}
- if( pCol->affinity>=SQLITE_AFF_TEXT && pSelect->pNext ){
- int m = 0;
- Select *pS2;
- for(m=0, pS2=pSelect->pNext; pS2; pS2=pS2->pNext){
+ if( pCol->affinity>=SQLITE_AFF_TEXT && (pS2->pNext || pS2!=pSelect) ){
+ for(pS2=pS2->pNext; pS2; pS2=pS2->pNext){
m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr);
}
if( pCol->affinity==SQLITE_AFF_TEXT && (m&0x01)!=0 ){
@@ -146751,12 +147912,12 @@ SQLITE_PRIVATE void sqlite3SubqueryColumnTypes(
}
}
if( zType ){
- i64 m = sqlite3Strlen30(zType);
+ const i64 k = sqlite3Strlen30(zType);
n = sqlite3Strlen30(pCol->zCnName);
- pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+m+2);
+ pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+k+2);
pCol->colFlags &= ~(COLFLAG_HASTYPE|COLFLAG_HASCOLL);
if( pCol->zCnName ){
- memcpy(&pCol->zCnName[n+1], zType, m+1);
+ memcpy(&pCol->zCnName[n+1], zType, k+1);
pCol->colFlags |= COLFLAG_HASTYPE;
}
}
@@ -149153,7 +150314,7 @@ static void constInsert(
){
int i;
assert( pColumn->op==TK_COLUMN );
- assert( sqlite3ExprIsConstant(pValue) );
+ assert( sqlite3ExprIsConstant(pConst->pParse, pValue) );
if( ExprHasProperty(pColumn, EP_FixedCol) ) return;
if( sqlite3ExprAffinity(pValue)!=0 ) return;
@@ -149211,10 +150372,10 @@ static void findConstInWhere(WhereConst *pConst, Expr *pExpr){
pLeft = pExpr->pLeft;
assert( pRight!=0 );
assert( pLeft!=0 );
- if( pRight->op==TK_COLUMN && sqlite3ExprIsConstant(pLeft) ){
+ if( pRight->op==TK_COLUMN && sqlite3ExprIsConstant(pConst->pParse, pLeft) ){
constInsert(pConst,pRight,pLeft,pExpr);
}
- if( pLeft->op==TK_COLUMN && sqlite3ExprIsConstant(pRight) ){
+ if( pLeft->op==TK_COLUMN && sqlite3ExprIsConstant(pConst->pParse, pRight) ){
constInsert(pConst,pLeft,pRight,pExpr);
}
}
@@ -149435,6 +150596,18 @@ static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){
** The hope is that the terms added to the inner query will make it more
** efficient.
**
+** NAME AMBIGUITY
+**
+** This optimization is called the "WHERE-clause push-down optimization".
+**
+** Do not confuse this optimization with another unrelated optimization
+** with a similar name: The "MySQL push-down optimization" causes WHERE
+** clause terms that can be evaluated using only the index and without
+** reference to the table are run first, so that if they are false,
+** unnecessary table seeks are avoided.
+**
+** RULES
+**
** Do not attempt this optimization if:
**
** (1) (** This restriction was removed on 2017-09-29. We used to
@@ -149500,15 +150673,19 @@ static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){
** (9c) There is a RIGHT JOIN (or FULL JOIN) in between the ON/USING
** clause and the subquery.
**
-** Without this restriction, the push-down optimization might move
-** the ON/USING filter expression from the left side of a RIGHT JOIN
-** over to the right side, which leads to incorrect answers. See
-** also restriction (6) in sqlite3ExprIsSingleTableConstraint().
+** Without this restriction, the WHERE-clause push-down optimization
+** might move the ON/USING filter expression from the left side of a
+** RIGHT JOIN over to the right side, which leads to incorrect answers.
+** See also restriction (6) in sqlite3ExprIsSingleTableConstraint().
**
** (10) The inner query is not the right-hand table of a RIGHT JOIN.
**
** (11) The subquery is not a VALUES clause
**
+** (12) The WHERE clause is not "rowid ISNULL" or the equivalent. This
+** case only comes up if SQLite is compiled using
+** SQLITE_ALLOW_ROWID_IN_VIEW.
+**
** Return 0 if no changes are made and non-zero if one or more WHERE clause
** terms are duplicated into the subquery.
*/
@@ -149619,7 +150796,19 @@ static int pushDownWhereTerms(
}
#endif
- if( sqlite3ExprIsSingleTableConstraint(pWhere, pSrcList, iSrc) ){
+#ifdef SQLITE_ALLOW_ROWID_IN_VIEW
+ if( ViewCanHaveRowid && (pWhere->op==TK_ISNULL || pWhere->op==TK_NOTNULL) ){
+ Expr *pLeft = pWhere->pLeft;
+ if( ALWAYS(pLeft)
+ && pLeft->op==TK_COLUMN
+ && pLeft->iColumn < 0
+ ){
+ return 0; /* Restriction (12) */
+ }
+ }
+#endif
+
+ if( sqlite3ExprIsSingleTableConstraint(pWhere, pSrcList, iSrc, 1) ){
nChng++;
pSubq->selFlags |= SF_PushDown;
while( pSubq ){
@@ -150246,12 +151435,14 @@ SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse *pParse, SrcItem *pFrom){
while( pSel->pPrior ){ pSel = pSel->pPrior; }
sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol);
pTab->iPKey = -1;
+ pTab->eTabType = TABTYP_VIEW;
pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
#ifndef SQLITE_ALLOW_ROWID_IN_VIEW
/* The usual case - do not allow ROWID on a subquery */
pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid;
#else
- pTab->tabFlags |= TF_Ephemeral; /* Legacy compatibility mode */
+ /* Legacy compatibility mode */
+ pTab->tabFlags |= TF_Ephemeral | sqlite3Config.mNoVisibleRowid;
#endif
return pParse->nErr ? SQLITE_ERROR : SQLITE_OK;
}
@@ -150519,7 +151710,7 @@ static int selectExpander(Walker *pWalker, Select *p){
pNestedFrom = pFrom->pSelect->pEList;
assert( pNestedFrom!=0 );
assert( pNestedFrom->nExpr==pTab->nCol );
- assert( VisibleRowid(pTab)==0 );
+ assert( VisibleRowid(pTab)==0 || ViewCanHaveRowid );
}else{
if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){
continue;
@@ -150551,7 +151742,8 @@ static int selectExpander(Walker *pWalker, Select *p){
pUsing = 0;
}
- nAdd = pTab->nCol + (VisibleRowid(pTab) && (selFlags&SF_NestedFrom));
+ nAdd = pTab->nCol;
+ if( VisibleRowid(pTab) && (selFlags & SF_NestedFrom)!=0 ) nAdd++;
for(j=0; ja[pNew->nExpr-1];
assert( pX->zEName==0 );
if( (selFlags & SF_NestedFrom)!=0 && !IN_RENAME_OBJECT ){
- if( pNestedFrom ){
+ if( pNestedFrom && (!ViewCanHaveRowid || jnExpr) ){
+ assert( jnExpr );
pX->zEName = sqlite3DbStrDup(db, pNestedFrom->a[j].zEName);
testcase( pX->zEName==0 );
}else{
@@ -150750,8 +151943,7 @@ static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
if( p->selFlags & SF_HasTypeInfo ) return;
p->selFlags |= SF_HasTypeInfo;
pParse = pWalker->pParse;
- testcase( (p->selFlags & SF_Resolved)==0 );
- assert( (p->selFlags & SF_Resolved) || IN_RENAME_OBJECT );
+ assert( (p->selFlags & SF_Resolved) );
pTabList = p->pSrc;
for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){
Table *pTab = pFrom->pTab;
@@ -150821,6 +152013,8 @@ SQLITE_PRIVATE void sqlite3SelectPrep(
*/
static void printAggInfo(AggInfo *pAggInfo){
int ii;
+ sqlite3DebugPrintf("AggInfo %d/%p:\n",
+ pAggInfo->selId, pAggInfo);
for(ii=0; iinColumn; ii++){
struct AggInfo_col *pCol = &pAggInfo->aCol[ii];
sqlite3DebugPrintf(
@@ -152011,7 +153205,7 @@ SQLITE_PRIVATE int sqlite3Select(
/* Generate code for all sub-queries in the FROM clause
*/
pSub = pItem->pSelect;
- if( pSub==0 ) continue;
+ if( pSub==0 || pItem->addrFillSub!=0 ) continue;
/* The code for a subquery should only be generated once. */
assert( pItem->addrFillSub==0 );
@@ -152042,7 +153236,7 @@ SQLITE_PRIVATE int sqlite3Select(
#endif
assert( pItem->pSelect && (pItem->pSelect->selFlags & SF_PushDown)!=0 );
}else{
- TREETRACE(0x4000,pParse,p,("Push-down not possible\n"));
+ TREETRACE(0x4000,pParse,p,("WHERE-lcause push-down not possible\n"));
}
/* Convert unused result columns of the subquery into simple NULL
@@ -152924,6 +154118,12 @@ SQLITE_PRIVATE int sqlite3Select(
sqlite3ExprListDelete(db, pMinMaxOrderBy);
#ifdef SQLITE_DEBUG
if( pAggInfo && !db->mallocFailed ){
+#if TREETRACE_ENABLED
+ if( sqlite3TreeTrace & 0x20 ){
+ TREETRACE(0x20,pParse,p,("Finished with AggInfo\n"));
+ printAggInfo(pAggInfo);
+ }
+#endif
for(i=0; inColumn; i++){
Expr *pExpr = pAggInfo->aCol[i].pCExpr;
if( pExpr==0 ) continue;
@@ -154105,6 +155305,72 @@ static ExprList *sqlite3ExpandReturning(
return pNew;
}
+/* If the Expr node is a subquery or an EXISTS operator or an IN operator that
+** uses a subquery, and if the subquery is SF_Correlated, then mark the
+** expression as EP_VarSelect.
+*/
+static int sqlite3ReturningSubqueryVarSelect(Walker *NotUsed, Expr *pExpr){
+ UNUSED_PARAMETER(NotUsed);
+ if( ExprUseXSelect(pExpr)
+ && (pExpr->x.pSelect->selFlags & SF_Correlated)!=0
+ ){
+ testcase( ExprHasProperty(pExpr, EP_VarSelect) );
+ ExprSetProperty(pExpr, EP_VarSelect);
+ }
+ return WRC_Continue;
+}
+
+
+/*
+** If the SELECT references the table pWalker->u.pTab, then do two things:
+**
+** (1) Mark the SELECT as as SF_Correlated.
+** (2) Set pWalker->eCode to non-zero so that the caller will know
+** that (1) has happened.
+*/
+static int sqlite3ReturningSubqueryCorrelated(Walker *pWalker, Select *pSelect){
+ int i;
+ SrcList *pSrc;
+ assert( pSelect!=0 );
+ pSrc = pSelect->pSrc;
+ assert( pSrc!=0 );
+ for(i=0; inSrc; i++){
+ if( pSrc->a[i].pTab==pWalker->u.pTab ){
+ testcase( pSelect->selFlags & SF_Correlated );
+ pSelect->selFlags |= SF_Correlated;
+ pWalker->eCode = 1;
+ break;
+ }
+ }
+ return WRC_Continue;
+}
+
+/*
+** Scan the expression list that is the argument to RETURNING looking
+** for subqueries that depend on the table which is being modified in the
+** statement that is hosting the RETURNING clause (pTab). Mark all such
+** subqueries as SF_Correlated. If the subqueries are part of an
+** expression, mark the expression as EP_VarSelect.
+**
+** https://sqlite.org/forum/forumpost/2c83569ce8945d39
+*/
+static void sqlite3ProcessReturningSubqueries(
+ ExprList *pEList,
+ Table *pTab
+){
+ Walker w;
+ memset(&w, 0, sizeof(w));
+ w.xExprCallback = sqlite3ExprWalkNoop;
+ w.xSelectCallback = sqlite3ReturningSubqueryCorrelated;
+ w.u.pTab = pTab;
+ sqlite3WalkExprList(&w, pEList);
+ if( w.eCode ){
+ w.xExprCallback = sqlite3ReturningSubqueryVarSelect;
+ w.xSelectCallback = sqlite3SelectWalkNoop;
+ sqlite3WalkExprList(&w, pEList);
+ }
+}
+
/*
** Generate code for the RETURNING trigger. Unlike other triggers
** that invoke a subprogram in the bytecode, the code for RETURNING
@@ -154141,6 +155407,7 @@ static void codeReturningTrigger(
sSelect.pSrc = &sFrom;
sFrom.nSrc = 1;
sFrom.a[0].pTab = pTab;
+ sFrom.a[0].zName = pTab->zName; /* tag-20240424-1 */
sFrom.a[0].iCursor = -1;
sqlite3SelectPrep(pParse, &sSelect, 0);
if( pParse->nErr==0 ){
@@ -154167,6 +155434,7 @@ static void codeReturningTrigger(
int i;
int nCol = pNew->nExpr;
int reg = pParse->nMem+1;
+ sqlite3ProcessReturningSubqueries(pNew, pTab);
pParse->nMem += nCol+2;
pReturning->iRetReg = reg;
for(i=0; ipUpsertIdx = pIdx;
+ if( sqlite3UpsertOfIndex(pAll,pIdx)!=pUpsert ){
+ /* Really this should be an error. The isDup ON CONFLICT clause will
+ ** never fire. But this problem was not discovered until three years
+ ** after multi-CONFLICT upsert was added, and so we silently ignore
+ ** the problem to prevent breaking applications that might actually
+ ** have redundant ON CONFLICT clauses. */
+ pUpsert->isDup = 1;
+ }
break;
}
if( pUpsert->pUpsertIdx==0 ){
@@ -156234,9 +157514,13 @@ SQLITE_PRIVATE int sqlite3UpsertNextIsIPK(Upsert *pUpsert){
Upsert *pNext;
if( NEVER(pUpsert==0) ) return 0;
pNext = pUpsert->pNextUpsert;
- if( pNext==0 ) return 1;
- if( pNext->pUpsertTarget==0 ) return 1;
- if( pNext->pUpsertIdx==0 ) return 1;
+ while( 1 /*exit-by-return*/ ){
+ if( pNext==0 ) return 1;
+ if( pNext->pUpsertTarget==0 ) return 1;
+ if( pNext->pUpsertIdx==0 ) return 1;
+ if( !pNext->isDup ) return 0;
+ pNext = pNext->pNextUpsert;
+ }
return 0;
}
@@ -157387,6 +158671,8 @@ static int vtabCallConstructor(
db->pVtabCtx = &sCtx;
pTab->nTabRef++;
rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVTable->pVtab, &zErr);
+ assert( pTab!=0 );
+ assert( pTab->nTabRef>1 || rc!=SQLITE_OK );
sqlite3DeleteTable(db, pTab);
db->pVtabCtx = sCtx.pPrior;
if( rc==SQLITE_NOMEM ) sqlite3OomFault(db);
@@ -157409,7 +158695,7 @@ static int vtabCallConstructor(
pVTable->nRef = 1;
if( sCtx.bDeclared==0 ){
const char *zFormat = "vtable constructor did not declare schema: %s";
- *pzErr = sqlite3MPrintf(db, zFormat, pTab->zName);
+ *pzErr = sqlite3MPrintf(db, zFormat, zModuleName);
sqlite3VtabUnlock(pVTable);
rc = SQLITE_ERROR;
}else{
@@ -157587,12 +158873,30 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
Table *pTab;
Parse sParse;
int initBusy;
+ int i;
+ const unsigned char *z;
+ static const u8 aKeyword[] = { TK_CREATE, TK_TABLE, 0 };
#ifdef SQLITE_ENABLE_API_ARMOR
if( !sqlite3SafetyCheckOk(db) || zCreateTable==0 ){
return SQLITE_MISUSE_BKPT;
}
#endif
+
+ /* Verify that the first two keywords in the CREATE TABLE statement
+ ** really are "CREATE" and "TABLE". If this is not the case, then
+ ** sqlite3_declare_vtab() is being misused.
+ */
+ z = (const unsigned char*)zCreateTable;
+ for(i=0; aKeyword[i]; i++){
+ int tokenType = 0;
+ do{ z += sqlite3GetToken(z, &tokenType); }while( tokenType==TK_SPACE );
+ if( tokenType!=aKeyword[i] ){
+ sqlite3ErrorWithMsg(db, SQLITE_ERROR, "syntax error");
+ return SQLITE_ERROR;
+ }
+ }
+
sqlite3_mutex_enter(db->mutex);
pCtx = db->pVtabCtx;
if( !pCtx || pCtx->bDeclared ){
@@ -157600,6 +158904,7 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
sqlite3_mutex_leave(db->mutex);
return SQLITE_MISUSE_BKPT;
}
+
pTab = pCtx->pTab;
assert( IsVirtual(pTab) );
@@ -157613,11 +158918,10 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
initBusy = db->init.busy;
db->init.busy = 0;
sParse.nQueryLoop = 1;
- if( SQLITE_OK==sqlite3RunParser(&sParse, zCreateTable)
- && ALWAYS(sParse.pNewTable!=0)
- && ALWAYS(!db->mallocFailed)
- && IsOrdinaryTable(sParse.pNewTable)
- ){
+ if( SQLITE_OK==sqlite3RunParser(&sParse, zCreateTable) ){
+ assert( sParse.pNewTable!=0 );
+ assert( !db->mallocFailed );
+ assert( IsOrdinaryTable(sParse.pNewTable) );
assert( sParse.zErrMsg==0 );
if( !pTab->aCol ){
Table *pNew = sParse.pNewTable;
@@ -160112,6 +161416,27 @@ static SQLITE_NOINLINE void filterPullDown(
}
}
+/*
+** Loop pLoop is a WHERE_INDEXED level that uses at least one IN(...)
+** operator. Return true if level pLoop is guaranteed to visit only one
+** row for each key generated for the index.
+*/
+static int whereLoopIsOneRow(WhereLoop *pLoop){
+ if( pLoop->u.btree.pIndex->onError
+ && pLoop->nSkip==0
+ && pLoop->u.btree.nEq==pLoop->u.btree.pIndex->nKeyCol
+ ){
+ int ii;
+ for(ii=0; iiu.btree.nEq; ii++){
+ if( pLoop->aLTerm[ii]->eOperator & (WO_IS|WO_ISNULL) ){
+ return 0;
+ }
+ }
+ return 1;
+ }
+ return 0;
+}
+
/*
** Generate code for the start of the iLevel-th loop in the WHERE clause
** implementation described by pWInfo.
@@ -160190,7 +161515,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
if( pLevel->iFrom>0 && (pTabItem[0].fg.jointype & JT_LEFT)!=0 ){
pLevel->iLeftJoin = ++pParse->nMem;
sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin);
- VdbeComment((v, "init LEFT JOIN no-match flag"));
+ VdbeComment((v, "init LEFT JOIN match flag"));
}
/* Compute a safe address to jump to if we discover that the table for
@@ -160861,7 +162186,9 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
}
/* Record the instruction used to terminate the loop. */
- if( pLoop->wsFlags & WHERE_ONEROW ){
+ if( (pLoop->wsFlags & WHERE_ONEROW)
+ || (pLevel->u.in.nIn && regBignull==0 && whereLoopIsOneRow(pLoop))
+ ){
pLevel->op = OP_Noop;
}else if( bRev ){
pLevel->op = OP_Prev;
@@ -161251,6 +162578,12 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
** iLoop==3: Code all remaining expressions.
**
** An effort is made to skip unnecessary iterations of the loop.
+ **
+ ** This optimization of causing simple query restrictions to occur before
+ ** more complex one is call the "push-down" optimization in MySQL. Here
+ ** in SQLite, the name is "MySQL push-down", since there is also another
+ ** totally unrelated optimization called "WHERE-clause push-down".
+ ** Sometimes the qualifier is omitted, resulting in an ambiguity, so beware.
*/
iLoop = (pIdx ? 1 : 2);
do{
@@ -161501,7 +162834,16 @@ SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3WhereRightJoinLoop(
pRJ->regReturn);
for(k=0; ka[k].pWLoop->iTab == pWInfo->a[k].iFrom );
+ pRight = &pWInfo->pTabList->a[pWInfo->a[k].iFrom];
mAll |= pWInfo->a[k].pWLoop->maskSelf;
+ if( pRight->fg.viaCoroutine ){
+ sqlite3VdbeAddOp3(
+ v, OP_Null, 0, pRight->regResult,
+ pRight->regResult + pRight->pSelect->pEList->nExpr-1
+ );
+ }
sqlite3VdbeAddOp1(v, OP_NullRow, pWInfo->a[k].iTabCur);
iIdxCur = pWInfo->a[k].iIdxCur;
if( iIdxCur ){
@@ -162558,7 +163900,7 @@ static SQLITE_NOINLINE int exprMightBeIndexed2(
if( pIdx->aiColumn[i]!=XN_EXPR ) continue;
assert( pIdx->bHasExpr );
if( sqlite3ExprCompareSkip(pExpr,pIdx->aColExpr->a[i].pExpr,iCur)==0
- && pExpr->op!=TK_STRING
+ && !sqlite3ExprIsConstant(0,pIdx->aColExpr->a[i].pExpr)
){
aiCurCol[0] = iCur;
aiCurCol[1] = XN_EXPR;
@@ -163207,6 +164549,7 @@ SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3WhereAddLimit(WhereClause *pWC, Selec
continue;
}
if( pWC->a[ii].leftCursor!=iCsr ) return;
+ if( pWC->a[ii].prereqRight!=0 ) return;
}
/* Check condition (5). Return early if it is not met. */
@@ -163221,12 +164564,14 @@ SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3WhereAddLimit(WhereClause *pWC, Selec
/* All conditions are met. Add the terms to the where-clause object. */
assert( p->pLimit->op==TK_LIMIT );
- whereAddLimitExpr(pWC, p->iLimit, p->pLimit->pLeft,
- iCsr, SQLITE_INDEX_CONSTRAINT_LIMIT);
- if( p->iOffset>0 ){
+ if( p->iOffset!=0 && (p->selFlags & SF_Compound)==0 ){
whereAddLimitExpr(pWC, p->iOffset, p->pLimit->pRight,
iCsr, SQLITE_INDEX_CONSTRAINT_OFFSET);
}
+ if( p->iOffset==0 || (p->selFlags & SF_Compound)==0 ){
+ whereAddLimitExpr(pWC, p->iLimit, p->pLimit->pLeft,
+ iCsr, SQLITE_INDEX_CONSTRAINT_LIMIT);
+ }
}
}
@@ -163744,6 +165089,42 @@ static Expr *whereRightSubexprIsColumn(Expr *p){
return 0;
}
+/*
+** Term pTerm is guaranteed to be a WO_IN term. It may be a component term
+** of a vector IN expression of the form "(x, y, ...) IN (SELECT ...)".
+** This function checks to see if the term is compatible with an index
+** column with affinity idxaff (one of the SQLITE_AFF_XYZ values). If so,
+** it returns a pointer to the name of the collation sequence (e.g. "BINARY"
+** or "NOCASE") used by the comparison in pTerm. If it is not compatible
+** with affinity idxaff, NULL is returned.
+*/
+static SQLITE_NOINLINE const char *indexInAffinityOk(
+ Parse *pParse,
+ WhereTerm *pTerm,
+ u8 idxaff
+){
+ Expr *pX = pTerm->pExpr;
+ Expr inexpr;
+
+ assert( pTerm->eOperator & WO_IN );
+
+ if( sqlite3ExprIsVector(pX->pLeft) ){
+ int iField = pTerm->u.x.iField - 1;
+ inexpr.flags = 0;
+ inexpr.op = TK_EQ;
+ inexpr.pLeft = pX->pLeft->x.pList->a[iField].pExpr;
+ assert( ExprUseXSelect(pX) );
+ inexpr.pRight = pX->x.pSelect->pEList->a[iField].pExpr;
+ pX = &inexpr;
+ }
+
+ if( sqlite3IndexAffinityOk(pX, idxaff) ){
+ CollSeq *pRet = sqlite3ExprCompareCollSeq(pParse, pX);
+ return pRet ? pRet->zName : sqlite3StrBINARY;
+ }
+ return 0;
+}
+
/*
** Advance to the next WhereTerm that matches according to the criteria
** established when the pScan object was initialized by whereScanInit().
@@ -163794,16 +165175,24 @@ static WhereTerm *whereScanNext(WhereScan *pScan){
if( (pTerm->eOperator & pScan->opMask)!=0 ){
/* Verify the affinity and collating sequence match */
if( pScan->zCollName && (pTerm->eOperator & WO_ISNULL)==0 ){
- CollSeq *pColl;
+ const char *zCollName;
Parse *pParse = pWC->pWInfo->pParse;
pX = pTerm->pExpr;
- if( !sqlite3IndexAffinityOk(pX, pScan->idxaff) ){
- continue;
+
+ if( (pTerm->eOperator & WO_IN) ){
+ zCollName = indexInAffinityOk(pParse, pTerm, pScan->idxaff);
+ if( !zCollName ) continue;
+ }else{
+ CollSeq *pColl;
+ if( !sqlite3IndexAffinityOk(pX, pScan->idxaff) ){
+ continue;
+ }
+ assert(pX->pLeft);
+ pColl = sqlite3ExprCompareCollSeq(pParse, pX);
+ zCollName = pColl ? pColl->zName : sqlite3StrBINARY;
}
- assert(pX->pLeft);
- pColl = sqlite3ExprCompareCollSeq(pParse, pX);
- if( pColl==0 ) pColl = pParse->db->pDfltColl;
- if( sqlite3StrICmp(pColl->zName, pScan->zCollName) ){
+
+ if( sqlite3StrICmp(zCollName, pScan->zCollName) ){
continue;
}
}
@@ -164155,9 +165544,13 @@ static void translateColumnToCopy(
** are no-ops.
*/
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(WHERETRACE_ENABLED)
-static void whereTraceIndexInfoInputs(sqlite3_index_info *p){
+static void whereTraceIndexInfoInputs(
+ sqlite3_index_info *p, /* The IndexInfo object */
+ Table *pTab /* The TABLE that is the virtual table */
+){
int i;
if( (sqlite3WhereTrace & 0x10)==0 ) return;
+ sqlite3DebugPrintf("sqlite3_index_info inputs for %s:\n", pTab->zName);
for(i=0; inConstraint; i++){
sqlite3DebugPrintf(
" constraint[%d]: col=%d termid=%d op=%d usabled=%d collseq=%s\n",
@@ -164175,9 +165568,13 @@ static void whereTraceIndexInfoInputs(sqlite3_index_info *p){
p->aOrderBy[i].desc);
}
}
-static void whereTraceIndexInfoOutputs(sqlite3_index_info *p){
+static void whereTraceIndexInfoOutputs(
+ sqlite3_index_info *p, /* The IndexInfo object */
+ Table *pTab /* The TABLE that is the virtual table */
+){
int i;
if( (sqlite3WhereTrace & 0x10)==0 ) return;
+ sqlite3DebugPrintf("sqlite3_index_info outputs for %s:\n", pTab->zName);
for(i=0; inConstraint; i++){
sqlite3DebugPrintf(" usage[%d]: argvIdx=%d omit=%d\n",
i,
@@ -164191,8 +165588,8 @@ static void whereTraceIndexInfoOutputs(sqlite3_index_info *p){
sqlite3DebugPrintf(" estimatedRows=%lld\n", p->estimatedRows);
}
#else
-#define whereTraceIndexInfoInputs(A)
-#define whereTraceIndexInfoOutputs(A)
+#define whereTraceIndexInfoInputs(A,B)
+#define whereTraceIndexInfoOutputs(A,B)
#endif
/*
@@ -164376,7 +165773,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex(
** WHERE clause (or the ON clause of a LEFT join) that constrain which
** rows of the target table (pSrc) that can be used. */
if( (pTerm->wtFlags & TERM_VIRTUAL)==0
- && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, pLevel->iFrom)
+ && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, pLevel->iFrom, 0)
){
pPartial = sqlite3ExprAnd(pParse, pPartial,
sqlite3ExprDup(pParse->db, pExpr, 0));
@@ -164418,7 +165815,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex(
** if they go out of sync.
*/
if( IsView(pTable) ){
- extraCols = ALLBITS;
+ extraCols = ALLBITS & ~idxCols;
}else{
extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1));
}
@@ -164645,7 +166042,7 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter(
for(pTerm=pWInfo->sWC.a; pTermpExpr;
if( (pTerm->wtFlags & TERM_VIRTUAL)==0
- && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, iSrc)
+ && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, iSrc, 0)
){
sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL);
}
@@ -164771,7 +166168,7 @@ static sqlite3_index_info *allocateIndexInfo(
Expr *pE2;
/* Skip over constant terms in the ORDER BY clause */
- if( sqlite3ExprIsConstant(pExpr) ){
+ if( sqlite3ExprIsConstant(0, pExpr) ){
continue;
}
@@ -164806,7 +166203,7 @@ static sqlite3_index_info *allocateIndexInfo(
}
if( i==n ){
nOrderBy = n;
- if( (pWInfo->wctrlFlags & WHERE_DISTINCTBY) ){
+ if( (pWInfo->wctrlFlags & WHERE_DISTINCTBY) && !pSrc->fg.rowidUsed ){
eDistinct = 2 + ((pWInfo->wctrlFlags & WHERE_SORTBYGROUP)!=0);
}else if( pWInfo->wctrlFlags & WHERE_GROUPBY ){
eDistinct = 1;
@@ -164883,7 +166280,7 @@ static sqlite3_index_info *allocateIndexInfo(
pIdxInfo->nConstraint = j;
for(i=j=0; ia[i].pExpr;
- if( sqlite3ExprIsConstant(pExpr) ) continue;
+ if( sqlite3ExprIsConstant(0, pExpr) ) continue;
assert( pExpr->op==TK_COLUMN
|| (pExpr->op==TK_COLLATE && pExpr->pLeft->op==TK_COLUMN
&& pExpr->iColumn==pExpr->pLeft->iColumn) );
@@ -164935,11 +166332,11 @@ static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){
sqlite3_vtab *pVtab = sqlite3GetVTable(pParse->db, pTab)->pVtab;
int rc;
- whereTraceIndexInfoInputs(p);
+ whereTraceIndexInfoInputs(p, pTab);
pParse->db->nSchemaLock++;
rc = pVtab->pModule->xBestIndex(pVtab, p);
pParse->db->nSchemaLock--;
- whereTraceIndexInfoOutputs(p);
+ whereTraceIndexInfoOutputs(p, pTab);
if( rc!=SQLITE_OK && rc!=SQLITE_CONSTRAINT ){
if( rc==SQLITE_NOMEM ){
@@ -166417,7 +167814,9 @@ static int whereLoopAddBtreeIndex(
}
if( pProbe->bUnordered || pProbe->bLowQual || pProbe->idxIsVector ){
if( pProbe->bUnordered ) opMask &= ~(WO_GT|WO_GE|WO_LT|WO_LE);
- if( pProbe->bLowQual ) opMask &= ~(WO_EQ|WO_IN|WO_IS);
+ if( pProbe->bLowQual && pSrc->fg.isIndexedBy==0 ){
+ opMask &= ~(WO_EQ|WO_IN|WO_IS);
+ }
if( pProbe->idxIsVector ) opMask = 0;
}
@@ -166685,10 +168084,13 @@ static int whereLoopAddBtreeIndex(
}
}
- /* Set rCostIdx to the cost of visiting selected rows in index. Add
- ** it to pNew->rRun, which is currently set to the cost of the index
- ** seek only. Then, if this is a non-covering index, add the cost of
- ** visiting the rows in the main table. */
+ /* Set rCostIdx to the estimated cost of visiting selected rows in the
+ ** index. The estimate is the sum of two values:
+ ** 1. The cost of doing one search-by-key to find the first matching
+ ** entry
+ ** 2. Stepping forward in the index pNew->nOut times to find all
+ ** additional matching entries.
+ */
assert( pSrc->pTab->szTabRow>0 );
if( pProbe->idxType==SQLITE_IDXTYPE_IPK ){
/* The pProbe->szIdxRow is low for an IPK table since the interior
@@ -166699,7 +168101,15 @@ static int whereLoopAddBtreeIndex(
}else{
rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow;
}
- pNew->rRun = sqlite3LogEstAdd(rLogSize, rCostIdx);
+ rCostIdx = sqlite3LogEstAdd(rLogSize, rCostIdx);
+
+ /* Estimate the cost of running the loop. If all data is coming
+ ** from the index, then this is just the cost of doing the index
+ ** lookup and scan. But if some data is coming out of the main table,
+ ** we also have to add in the cost of doing pNew->nOut searches to
+ ** locate the row in the main table that corresponds to the index entry.
+ */
+ pNew->rRun = rCostIdx;
if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK|WHERE_EXPRIDX))==0 ){
pNew->rRun = sqlite3LogEstAdd(pNew->rRun, pNew->nOut + 16);
}
@@ -166805,7 +168215,9 @@ static int indexMightHelpWithOrderBy(
for(ii=0; iinExpr; ii++){
Expr *pExpr = sqlite3ExprSkipCollateAndLikely(pOB->a[ii].pExpr);
if( NEVER(pExpr==0) ) continue;
- if( pExpr->op==TK_COLUMN && pExpr->iTable==iCursor ){
+ if( (pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN)
+ && pExpr->iTable==iCursor
+ ){
if( pExpr->iColumn<0 ) return 1;
for(jj=0; jjnKeyCol; jj++){
if( pExpr->iColumn==pIndex->aiColumn[jj] ) return 1;
@@ -167065,7 +168477,7 @@ static void wherePartIdxExpr(
u8 aff;
if( pLeft->op!=TK_COLUMN ) return;
- if( !sqlite3ExprIsConstant(pRight) ) return;
+ if( !sqlite3ExprIsConstant(0, pRight) ) return;
if( !sqlite3IsBinary(sqlite3ExprCompareCollSeq(pParse, pPart)) ) return;
if( pLeft->iColumn<0 ) return;
aff = pIdx->pTable->aCol[pLeft->iColumn].affinity;
@@ -167341,7 +168753,9 @@ static int whereLoopAddBtree(
" according to whereIsCoveringIndex()\n", pProbe->zName));
}
}
- }else if( m==0 ){
+ }else if( m==0
+ && (HasRowid(pTab) || pWInfo->pSelect!=0 || sqlite3FaultSim(700))
+ ){
WHERETRACE(0x200,
("-> %s a covering index according to bitmasks\n",
pProbe->zName, m==0 ? "is" : "is not"));
@@ -167417,7 +168831,7 @@ static int whereLoopAddBtree(
** unique index is used (making the index functionally non-unique)
** then the sqlite_stat1 data becomes important for scoring the
** plan */
- pTab->tabFlags |= TF_StatsUsed;
+ pTab->tabFlags |= TF_MaybeReanalyze;
}
#ifdef SQLITE_ENABLE_STAT4
sqlite3Stat4ProbeFree(pBuilder->pRec);
@@ -167439,6 +168853,21 @@ static int isLimitTerm(WhereTerm *pTerm){
&& pTerm->eMatchOp<=SQLITE_INDEX_CONSTRAINT_OFFSET;
}
+/*
+** Return true if the first nCons constraints in the pUsage array are
+** marked as in-use (have argvIndex>0). False otherwise.
+*/
+static int allConstraintsUsed(
+ struct sqlite3_index_constraint_usage *aUsage,
+ int nCons
+){
+ int ii;
+ for(ii=0; iipNew->iTab. This
@@ -167579,13 +169008,20 @@ static int whereLoopAddVirtualOne(
*pbIn = 1; assert( (mExclude & WO_IN)==0 );
}
+ /* Unless pbRetryLimit is non-NULL, there should be no LIMIT/OFFSET
+ ** terms. And if there are any, they should follow all other terms. */
assert( pbRetryLimit || !isLimitTerm(pTerm) );
- if( isLimitTerm(pTerm) && *pbIn ){
+ assert( !isLimitTerm(pTerm) || i>=nConstraint-2 );
+ assert( !isLimitTerm(pTerm) || i==nConstraint-1 || isLimitTerm(pTerm+1) );
+
+ if( isLimitTerm(pTerm) && (*pbIn || !allConstraintsUsed(pUsage, i)) ){
/* If there is an IN(...) term handled as an == (separate call to
** xFilter for each value on the RHS of the IN) and a LIMIT or
- ** OFFSET term handled as well, the plan is unusable. Set output
- ** variable *pbRetryLimit to true to tell the caller to retry with
- ** LIMIT and OFFSET disabled. */
+ ** OFFSET term handled as well, the plan is unusable. Similarly,
+ ** if there is a LIMIT/OFFSET and there are other unused terms,
+ ** the plan cannot be used. In these cases set variable *pbRetryLimit
+ ** to true to tell the caller to retry with LIMIT and OFFSET
+ ** disabled. */
if( pIdxInfo->needToFreeIdxStr ){
sqlite3_free(pIdxInfo->idxStr);
pIdxInfo->idxStr = 0;
@@ -168442,7 +169878,7 @@ static i8 wherePathSatisfiesOrderBy(
if( MASKBIT(i) & obSat ) continue;
p = pOrderBy->a[i].pExpr;
mTerm = sqlite3WhereExprUsage(&pWInfo->sMaskSet,p);
- if( mTerm==0 && !sqlite3ExprIsConstant(p) ) continue;
+ if( mTerm==0 && !sqlite3ExprIsConstant(0,p) ) continue;
if( (mTerm&~orderDistinctMask)==0 ){
obSat |= MASKBIT(i);
}
@@ -168911,10 +170347,9 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
if( pFrom->isOrdered==pWInfo->pOrderBy->nExpr ){
pWInfo->eDistinct = WHERE_DISTINCT_ORDERED;
}
- if( pWInfo->pSelect->pOrderBy
- && pWInfo->nOBSat > pWInfo->pSelect->pOrderBy->nExpr ){
- pWInfo->nOBSat = pWInfo->pSelect->pOrderBy->nExpr;
- }
+ /* vvv--- See check-in [12ad822d9b827777] on 2023-03-16 ---vvv */
+ assert( pWInfo->pSelect->pOrderBy==0
+ || pWInfo->nOBSat <= pWInfo->pSelect->pOrderBy->nExpr );
}else{
pWInfo->revMask = pFrom->revLoop;
if( pWInfo->nOBSat<=0 ){
@@ -168957,7 +170392,6 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
}
}
-
pWInfo->nRowOut = pFrom->nRow;
/* Free temporary memory and return success */
@@ -168965,6 +170399,83 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
return SQLITE_OK;
}
+/*
+** This routine implements a heuristic designed to improve query planning.
+** This routine is called in between the first and second call to
+** wherePathSolver(). Hence the name "Interstage" "Heuristic".
+**
+** The first call to wherePathSolver() (hereafter just "solver()") computes
+** the best path without regard to the order of the outputs. The second call
+** to the solver() builds upon the first call to try to find an alternative
+** path that satisfies the ORDER BY clause.
+**
+** This routine looks at the results of the first solver() run, and for
+** every FROM clause term in the resulting query plan that uses an equality
+** constraint against an index, disable other WhereLoops for that same
+** FROM clause term that would try to do a full-table scan. This prevents
+** an index search from being converted into a full-table scan in order to
+** satisfy an ORDER BY clause, since even though we might get slightly better
+** performance using the full-scan without sorting if the output size
+** estimates are very precise, we might also get severe performance
+** degradation using the full-scan if the output size estimate is too large.
+** It is better to err on the side of caution.
+**
+** Except, if the first solver() call generated a full-table scan in an outer
+** loop then stop this analysis at the first full-scan, since the second
+** solver() run might try to swap that full-scan for another in order to
+** get the output into the correct order. In other words, we allow a
+** rewrite like this:
+**
+** First Solver() Second Solver()
+** |-- SCAN t1 |-- SCAN t2
+** |-- SEARCH t2 `-- SEARCH t1
+** `-- SORT USING B-TREE
+**
+** The purpose of this routine is to disallow rewrites such as:
+**
+** First Solver() Second Solver()
+** |-- SEARCH t1 |-- SCAN t2 <--- bad!
+** |-- SEARCH t2 `-- SEARCH t1
+** `-- SORT USING B-TREE
+**
+** See test cases in test/whereN.test for the real-world query that
+** originally provoked this heuristic.
+*/
+static SQLITE_NOINLINE void whereInterstageHeuristic(WhereInfo *pWInfo){
+ int i;
+#ifdef WHERETRACE_ENABLED
+ int once = 0;
+#endif
+ for(i=0; inLevel; i++){
+ WhereLoop *p = pWInfo->a[i].pWLoop;
+ if( p==0 ) break;
+ if( (p->wsFlags & WHERE_VIRTUALTABLE)!=0 ) continue;
+ if( (p->wsFlags & (WHERE_COLUMN_EQ|WHERE_COLUMN_NULL|WHERE_COLUMN_IN))!=0 ){
+ u8 iTab = p->iTab;
+ WhereLoop *pLoop;
+ for(pLoop=pWInfo->pLoops; pLoop; pLoop=pLoop->pNextLoop){
+ if( pLoop->iTab!=iTab ) continue;
+ if( (pLoop->wsFlags & (WHERE_CONSTRAINT|WHERE_AUTO_INDEX))!=0 ){
+ /* Auto-index and index-constrained loops allowed to remain */
+ continue;
+ }
+#ifdef WHERETRACE_ENABLED
+ if( sqlite3WhereTrace & 0x80 ){
+ if( once==0 ){
+ sqlite3DebugPrintf("Loops disabled by interstage heuristic:\n");
+ once = 1;
+ }
+ sqlite3WhereLoopPrint(pLoop, &pWInfo->sWC);
+ }
+#endif /* WHERETRACE_ENABLED */
+ pLoop->prereq = ALLBITS; /* Prevent 2nd solver() from using this one */
+ }
+ }else{
+ break;
+ }
+ }
+}
+
/*
** Most queries use only a single table (they are not joins) and have
** simple == constraints against indexed fields. This routine attempts
@@ -169133,6 +170644,10 @@ static void showAllWhereLoops(WhereInfo *pWInfo, WhereClause *pWC){
** the right-most table of a subquery that was flattened into the
** main query and that subquery was the right-hand operand of an
** inner join that held an ON or USING clause.
+** 6) The ORDER BY clause has 63 or fewer terms
+** 7) The omit-noop-join optimization is enabled.
+**
+** Items (1), (6), and (7) are checked by the caller.
**
** For example, given:
**
@@ -169253,7 +170768,7 @@ static SQLITE_NOINLINE void whereCheckIfBloomFilterIsUseful(
SrcItem *pItem = &pWInfo->pTabList->a[pLoop->iTab];
Table *pTab = pItem->pTab;
if( (pTab->tabFlags & TF_HasStat1)==0 ) break;
- pTab->tabFlags |= TF_StatsUsed;
+ pTab->tabFlags |= TF_MaybeReanalyze;
if( i>=1
&& (pLoop->wsFlags & reqFlags)==reqFlags
/* vvvvvv--- Always the case if WHERE_COLUMN_EQ is defined */
@@ -169274,6 +170789,58 @@ static SQLITE_NOINLINE void whereCheckIfBloomFilterIsUseful(
}
}
+/*
+** Expression Node callback for sqlite3ExprCanReturnSubtype().
+**
+** Only a function call is able to return a subtype. So if the node
+** is not a function call, return WRC_Prune immediately.
+**
+** A function call is able to return a subtype if it has the
+** SQLITE_RESULT_SUBTYPE property.
+**
+** Assume that every function is able to pass-through a subtype from
+** one of its argument (using sqlite3_result_value()). Most functions
+** are not this way, but we don't have a mechanism to distinguish those
+** that are from those that are not, so assume they all work this way.
+** That means that if one of its arguments is another function and that
+** other function is able to return a subtype, then this function is
+** able to return a subtype.
+*/
+static int exprNodeCanReturnSubtype(Walker *pWalker, Expr *pExpr){
+ int n;
+ FuncDef *pDef;
+ sqlite3 *db;
+ if( pExpr->op!=TK_FUNCTION ){
+ return WRC_Prune;
+ }
+ assert( ExprUseXList(pExpr) );
+ db = pWalker->pParse->db;
+ n = pExpr->x.pList ? pExpr->x.pList->nExpr : 0;
+ pDef = sqlite3FindFunction(db, pExpr->u.zToken, n, ENC(db), 0);
+ if( pDef==0 || (pDef->funcFlags & SQLITE_RESULT_SUBTYPE)!=0 ){
+ pWalker->eCode = 1;
+ return WRC_Prune;
+ }
+ return WRC_Continue;
+}
+
+/*
+** Return TRUE if expression pExpr is able to return a subtype.
+**
+** A TRUE return does not guarantee that a subtype will be returned.
+** It only indicates that a subtype return is possible. False positives
+** are acceptable as they only disable an optimization. False negatives,
+** on the other hand, can lead to incorrect answers.
+*/
+static int sqlite3ExprCanReturnSubtype(Parse *pParse, Expr *pExpr){
+ Walker w;
+ memset(&w, 0, sizeof(w));
+ w.pParse = pParse;
+ w.xExprCallback = exprNodeCanReturnSubtype;
+ sqlite3WalkExpr(&w, pExpr);
+ return w.eCode;
+}
+
/*
** The index pIdx is used by a query and contains one or more expressions.
** In other words pIdx is an index on an expression. iIdxCur is the cursor
@@ -169299,33 +170866,19 @@ static SQLITE_NOINLINE void whereAddIndexedExpr(
for(i=0; inColumn; i++){
Expr *pExpr;
int j = pIdx->aiColumn[i];
- int bMaybeNullRow;
if( j==XN_EXPR ){
pExpr = pIdx->aColExpr->a[i].pExpr;
- testcase( pTabItem->fg.jointype & JT_LEFT );
- testcase( pTabItem->fg.jointype & JT_RIGHT );
- testcase( pTabItem->fg.jointype & JT_LTORJ );
- bMaybeNullRow = (pTabItem->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT))!=0;
}else if( j>=0 && (pTab->aCol[j].colFlags & COLFLAG_VIRTUAL)!=0 ){
pExpr = sqlite3ColumnExpr(pTab, &pTab->aCol[j]);
- bMaybeNullRow = 0;
}else{
continue;
}
- if( sqlite3ExprIsConstant(pExpr) ) continue;
- if( pExpr->op==TK_FUNCTION ){
+ if( sqlite3ExprIsConstant(0,pExpr) ) continue;
+ if( pExpr->op==TK_FUNCTION && sqlite3ExprCanReturnSubtype(pParse,pExpr) ){
/* Functions that might set a subtype should not be replaced by the
** value taken from an expression index since the index omits the
** subtype. https://sqlite.org/forum/forumpost/68d284c86b082c3e */
- int n;
- FuncDef *pDef;
- sqlite3 *db = pParse->db;
- assert( ExprUseXList(pExpr) );
- n = pExpr->x.pList ? pExpr->x.pList->nExpr : 0;
- pDef = sqlite3FindFunction(db, pExpr->u.zToken, n, ENC(db), 0);
- if( pDef==0 || (pDef->funcFlags & SQLITE_RESULT_SUBTYPE)!=0 ){
- continue;
- }
+ continue;
}
p = sqlite3DbMallocRaw(pParse->db, sizeof(IndexedExpr));
if( p==0 ) break;
@@ -169340,7 +170893,7 @@ static SQLITE_NOINLINE void whereAddIndexedExpr(
p->iDataCur = pTabItem->iCursor;
p->iIdxCur = iIdxCur;
p->iIdxCol = i;
- p->bMaybeNullRow = bMaybeNullRow;
+ p->bMaybeNullRow = (pTabItem->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT))!=0;
if( sqlite3IndexAffinityStr(pParse->db, pIdx) ){
p->aff = pIdx->zColAff[i];
}
@@ -169508,6 +171061,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
if( pOrderBy && pOrderBy->nExpr>=BMS ){
pOrderBy = 0;
wctrlFlags &= ~WHERE_WANT_DISTINCT;
+ wctrlFlags |= WHERE_KEEP_ALL_JOINS; /* Disable omit-noop-join opt */
}
/* The number of tables in the FROM clause is limited by the number of
@@ -169590,7 +171144,11 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
){
pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE;
}
- ExplainQueryPlan((pParse, 0, "SCAN CONSTANT ROW"));
+ if( ALWAYS(pWInfo->pSelect)
+ && (pWInfo->pSelect->selFlags & SF_MultiValue)==0
+ ){
+ ExplainQueryPlan((pParse, 0, "SCAN CONSTANT ROW"));
+ }
}else{
/* Assign a bit from the bitmask to every term in the FROM clause.
**
@@ -169743,6 +171301,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
wherePathSolver(pWInfo, 0);
if( db->mallocFailed ) goto whereBeginError;
if( pWInfo->pOrderBy ){
+ whereInterstageHeuristic(pWInfo);
wherePathSolver(pWInfo, pWInfo->nRowOut+1);
if( db->mallocFailed ) goto whereBeginError;
}
@@ -169803,10 +171362,10 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
** in-line sqlite3WhereCodeOneLoopStart() for performance reasons.
*/
notReady = ~(Bitmask)0;
- if( pWInfo->nLevel>=2
- && pResultSet!=0 /* these two combine to guarantee */
- && 0==(wctrlFlags & WHERE_AGG_DISTINCT) /* condition (1) above */
- && OptimizationEnabled(db, SQLITE_OmitNoopJoin)
+ if( pWInfo->nLevel>=2 /* Must be a join, or this opt8n is pointless */
+ && pResultSet!=0 /* Condition (1) */
+ && 0==(wctrlFlags & (WHERE_AGG_DISTINCT|WHERE_KEEP_ALL_JOINS)) /* (1),(6) */
+ && OptimizationEnabled(db, SQLITE_OmitNoopJoin) /* (7) */
){
notReady = whereOmitNoopJoin(pWInfo, notReady);
nTabList = pWInfo->nLevel;
@@ -170126,26 +171685,6 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
}
#endif
-#ifdef SQLITE_DEBUG
-/*
-** Return true if cursor iCur is opened by instruction k of the
-** bytecode. Used inside of assert() only.
-*/
-static int cursorIsOpen(Vdbe *v, int iCur, int k){
- while( k>=0 ){
- VdbeOp *pOp = sqlite3VdbeGetOp(v,k--);
- if( pOp->p1!=iCur ) continue;
- if( pOp->opcode==OP_Close ) return 0;
- if( pOp->opcode==OP_OpenRead ) return 1;
- if( pOp->opcode==OP_OpenWrite ) return 1;
- if( pOp->opcode==OP_OpenDup ) return 1;
- if( pOp->opcode==OP_OpenAutoindex ) return 1;
- if( pOp->opcode==OP_OpenEphemeral ) return 1;
- }
- return 0;
-}
-#endif /* SQLITE_DEBUG */
-
/*
** Generate the end of the WHERE loop. See comments on
** sqlite3WhereBegin() for additional information.
@@ -170292,7 +171831,15 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); VdbeCoverage(v);
assert( (ws & WHERE_IDX_ONLY)==0 || (ws & WHERE_INDEXED)!=0 );
if( (ws & WHERE_IDX_ONLY)==0 ){
- assert( pLevel->iTabCur==pTabList->a[pLevel->iFrom].iCursor );
+ SrcItem *pSrc = &pTabList->a[pLevel->iFrom];
+ assert( pLevel->iTabCur==pSrc->iCursor );
+ if( pSrc->fg.viaCoroutine ){
+ int m, n;
+ n = pSrc->regResult;
+ assert( pSrc->pTab!=0 );
+ m = pSrc->pTab->nCol;
+ sqlite3VdbeAddOp3(v, OP_Null, 0, n, n+m-1);
+ }
sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iTabCur);
}
if( (ws & WHERE_INDEXED)
@@ -170342,6 +171889,7 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
*/
if( pTabItem->fg.viaCoroutine ){
testcase( pParse->db->mallocFailed );
+ assert( pTabItem->regResult>=0 );
translateColumnToCopy(pParse, pLevel->addrBody, pLevel->iTabCur,
pTabItem->regResult, 0);
continue;
@@ -170436,16 +171984,10 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
** reference. Verify that this is harmless - that the
** table being referenced really is open.
*/
-#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
- assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0
- || cursorIsOpen(v,pOp->p1,k)
- || pOp->opcode==OP_Offset
- );
-#else
- assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0
- || cursorIsOpen(v,pOp->p1,k)
- );
-#endif
+ if( pLoop->wsFlags & WHERE_IDX_ONLY ){
+ sqlite3ErrorMsg(pParse, "internal query planner error");
+ pParse->rc = SQLITE_INTERNAL;
+ }
}
}else if( pOp->opcode==OP_Rowid ){
pOp->p1 = pLevel->iIdxCur;
@@ -171646,7 +173188,7 @@ SQLITE_PRIVATE void sqlite3WindowListDelete(sqlite3 *db, Window *p){
** variable values in the expression tree.
*/
static Expr *sqlite3WindowOffsetExpr(Parse *pParse, Expr *pExpr){
- if( 0==sqlite3ExprIsConstant(pExpr) ){
+ if( 0==sqlite3ExprIsConstant(0,pExpr) ){
if( IN_RENAME_OBJECT ) sqlite3RenameExprUnmap(pParse, pExpr);
sqlite3ExprDelete(pParse->db, pExpr);
pExpr = sqlite3ExprAlloc(pParse->db, TK_NULL, 0, 0);
@@ -173716,9 +175258,9 @@ static void updateDeleteLimitError(
break;
}
}
- if( (p->selFlags & SF_MultiValue)==0 &&
- (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 &&
- cnt>mxSelect
+ if( (p->selFlags & (SF_MultiValue|SF_Values))==0
+ && (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0
+ && cnt>mxSelect
){
sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
}
@@ -173738,6 +175280,14 @@ static void updateDeleteLimitError(
return pSelect;
}
+ /* Memory allocator for parser stack resizing. This is a thin wrapper around
+ ** sqlite3_realloc() that includes a call to sqlite3FaultSim() to facilitate
+ ** testing.
+ */
+ static void *parserStackRealloc(void *pOld, sqlite3_uint64 newSize){
+ return sqlite3FaultSim(700) ? 0 : sqlite3_realloc(pOld, newSize);
+ }
+
/* Construct a new Expr object from a single token */
static Expr *tokenExpr(Parse *pParse, int op, Token t){
@@ -173990,8 +175540,8 @@ static void updateDeleteLimitError(
#define TK_AGG_COLUMN 173
#define TK_TRUEFALSE 174
#define TK_ISNOT 175
-#define TK_UMINUS 176
-#define TK_UPLUS 177
+#define TK_UPLUS 176
+#define TK_UMINUS 177
#define TK_TRUTH 178
#define TK_REGISTER 179
#define TK_VECTOR 180
@@ -174000,8 +175550,9 @@ static void updateDeleteLimitError(
#define TK_ASTERISK 183
#define TK_SPAN 184
#define TK_ERROR 185
-#define TK_SPACE 186
-#define TK_ILLEGAL 187
+#define TK_QNUMBER 186
+#define TK_SPACE 187
+#define TK_ILLEGAL 188
#endif
/**************** End token definitions ***************************************/
@@ -174042,6 +175593,9 @@ static void updateDeleteLimitError(
** sqlite3ParserARG_STORE Code to store %extra_argument into yypParser
** sqlite3ParserARG_FETCH Code to extract %extra_argument from yypParser
** sqlite3ParserCTX_* As sqlite3ParserARG_ except for %extra_context
+** YYREALLOC Name of the realloc() function to use
+** YYFREE Name of the free() function to use
+** YYDYNSTACK True if stack space should be extended on heap
** YYERRORSYMBOL is the code number of the error symbol. If not
** defined, then do no error processing.
** YYNSTATE the combined number of states.
@@ -174055,37 +175609,39 @@ static void updateDeleteLimitError(
** YY_NO_ACTION The yy_action[] code for no-op
** YY_MIN_REDUCE Minimum value for reduce actions
** YY_MAX_REDUCE Maximum value for reduce actions
+** YY_MIN_DSTRCTR Minimum symbol value that has a destructor
+** YY_MAX_DSTRCTR Maximum symbol value that has a destructor
*/
#ifndef INTERFACE
# define INTERFACE 1
#endif
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int
-#define YYNOCODE 323
+#define YYNOCODE 326
#define YYACTIONTYPE unsigned short int
#define YYWILDCARD 105
#define sqlite3ParserTOKENTYPE Token
typedef union {
int yyinit;
sqlite3ParserTOKENTYPE yy0;
- u32 yy9;
- struct TrigEvent yy28;
- With* yy125;
- IdList* yy204;
- struct FrameBound yy205;
- TriggerStep* yy319;
- const char* yy342;
- Cte* yy361;
- ExprList* yy402;
- Upsert* yy403;
- OnOrUsing yy421;
- u8 yy444;
- struct {int value; int mask;} yy481;
- Window* yy483;
- int yy502;
- SrcList* yy563;
- Expr* yy590;
- Select* yy637;
+ Expr* yy66;
+ ExprList* yy70;
+ struct TrigEvent yy158;
+ Upsert* yy186;
+ u32 yy191;
+ TriggerStep* yy243;
+ Window* yy255;
+ int yy320;
+ IdList* yy332;
+ u8 yy390;
+ const char* yy400;
+ struct FrameBound yy417;
+ Cte* yy487;
+ OnOrUsing yy497;
+ With* yy523;
+ struct {int value; int mask;} yy571;
+ SrcList* yy595;
+ Select* yy599;
} YYMINORTYPE;
#ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100
@@ -174095,24 +175651,29 @@ typedef union {
#define sqlite3ParserARG_PARAM
#define sqlite3ParserARG_FETCH
#define sqlite3ParserARG_STORE
+#define YYREALLOC parserStackRealloc
+#define YYFREE sqlite3_free
+#define YYDYNSTACK 1
#define sqlite3ParserCTX_SDECL Parse *pParse;
#define sqlite3ParserCTX_PDECL ,Parse *pParse
#define sqlite3ParserCTX_PARAM ,pParse
#define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse;
#define sqlite3ParserCTX_STORE yypParser->pParse=pParse;
#define YYFALLBACK 1
-#define YYNSTATE 597
-#define YYNRULE 413
-#define YYNRULE_WITH_ACTION 348
-#define YYNTOKEN 188
-#define YY_MAX_SHIFT 596
-#define YY_MIN_SHIFTREDUCE 861
-#define YY_MAX_SHIFTREDUCE 1273
-#define YY_ERROR_ACTION 1274
-#define YY_ACCEPT_ACTION 1275
-#define YY_NO_ACTION 1276
-#define YY_MIN_REDUCE 1277
-#define YY_MAX_REDUCE 1689
+#define YYNSTATE 601
+#define YYNRULE 417
+#define YYNRULE_WITH_ACTION 352
+#define YYNTOKEN 189
+#define YY_MAX_SHIFT 600
+#define YY_MIN_SHIFTREDUCE 868
+#define YY_MAX_SHIFTREDUCE 1284
+#define YY_ERROR_ACTION 1285
+#define YY_ACCEPT_ACTION 1286
+#define YY_NO_ACTION 1287
+#define YY_MIN_REDUCE 1288
+#define YY_MAX_REDUCE 1704
+#define YY_MIN_DSTRCTR 208
+#define YY_MAX_DSTRCTR 323
/************* End control #defines *******************************************/
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
@@ -174128,6 +175689,22 @@ typedef union {
# define yytestcase(X)
#endif
+/* Macro to determine if stack space has the ability to grow using
+** heap memory.
+*/
+#if YYSTACKDEPTH<=0 || YYDYNSTACK
+# define YYGROWABLESTACK 1
+#else
+# define YYGROWABLESTACK 0
+#endif
+
+/* Guarantee a minimum number of initial stack slots.
+*/
+#if YYSTACKDEPTH<=0
+# undef YYSTACKDEPTH
+# define YYSTACKDEPTH 2 /* Need a minimum stack size */
+#endif
+
/* Next are the tables used to determine what action to take based on the
** current state and lookahead token. These tables are used to implement
@@ -174179,628 +175756,638 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (2119)
+#define YY_ACTTAB_COUNT (2158)
static const YYACTIONTYPE yy_action[] = {
- /* 0 */ 119, 116, 235, 590, 1350, 590, 1329, 565, 590, 493,
- /* 10 */ 397, 590, 393, 590, 1350, 590, 119, 116, 235, 590,
- /* 20 */ 424, 544, 1567, 584, 584, 584, 42, 42, 42, 42,
- /* 30 */ 390, 13, 13, 1002, 72, 72, 72, 72, 42, 42,
- /* 40 */ 1312, 1003, 71, 71, 16, 16, 436, 126, 127, 81,
- /* 50 */ 1248, 1248, 1082, 1085, 1072, 1072, 124, 124, 125, 125,
- /* 60 */ 125, 125, 424, 1303, 1275, 1, 1, 596, 2, 1279,
- /* 70 */ 1303, 572, 1315, 572, 327, 1300, 144, 1355, 1355, 546,
- /* 80 */ 592, 571, 592, 1366, 302, 119, 116, 235, 545, 126,
- /* 90 */ 127, 81, 1248, 1248, 1082, 1085, 1072, 1072, 124, 124,
- /* 100 */ 125, 125, 125, 125, 396, 1314, 123, 123, 123, 123,
- /* 110 */ 122, 122, 121, 121, 121, 120, 117, 461, 295, 295,
- /* 120 */ 391, 566, 566, 295, 295, 1607, 389, 1609, 101, 388,
- /* 130 */ 1190, 587, 1195, 424, 1195, 433, 587, 1607, 559, 102,
- /* 140 */ 268, 232, 493, 1190, 145, 246, 1190, 461, 123, 123,
- /* 150 */ 123, 123, 122, 122, 121, 121, 121, 120, 117, 461,
- /* 160 */ 126, 127, 81, 1248, 1248, 1082, 1085, 1072, 1072, 124,
- /* 170 */ 124, 125, 125, 125, 125, 119, 116, 235, 465, 121,
- /* 180 */ 121, 121, 120, 117, 461, 588, 128, 957, 957, 290,
- /* 190 */ 123, 123, 123, 123, 122, 122, 121, 121, 121, 120,
- /* 200 */ 117, 461, 326, 581, 337, 261, 1126, 424, 526, 523,
- /* 210 */ 522, 125, 125, 125, 125, 118, 195, 305, 521, 123,
- /* 220 */ 123, 123, 123, 122, 122, 121, 121, 121, 120, 117,
- /* 230 */ 461, 9, 911, 271, 126, 127, 81, 1248, 1248, 1082,
- /* 240 */ 1085, 1072, 1072, 124, 124, 125, 125, 125, 125, 424,
- /* 250 */ 119, 116, 235, 1602, 84, 1652, 1224, 6, 83, 123,
- /* 260 */ 123, 123, 123, 122, 122, 121, 121, 121, 120, 117,
- /* 270 */ 461, 1244, 335, 472, 484, 353, 126, 127, 81, 1248,
- /* 280 */ 1248, 1082, 1085, 1072, 1072, 124, 124, 125, 125, 125,
- /* 290 */ 125, 472, 471, 123, 123, 123, 123, 122, 122, 121,
- /* 300 */ 121, 121, 120, 117, 461, 122, 122, 121, 121, 121,
- /* 310 */ 120, 117, 461, 1224, 1225, 1224, 493, 1190, 230, 537,
- /* 320 */ 424, 125, 125, 125, 125, 1224, 484, 353, 555, 1244,
- /* 330 */ 1190, 281, 280, 1190, 386, 123, 123, 123, 123, 122,
- /* 340 */ 122, 121, 121, 121, 120, 117, 461, 126, 127, 81,
- /* 350 */ 1248, 1248, 1082, 1085, 1072, 1072, 124, 124, 125, 125,
- /* 360 */ 125, 125, 1128, 1531, 1224, 472, 1128, 1224, 433, 123,
- /* 370 */ 123, 123, 123, 122, 122, 121, 121, 121, 120, 117,
- /* 380 */ 461, 1190, 1224, 1225, 1224, 261, 1224, 554, 526, 523,
- /* 390 */ 522, 308, 562, 513, 1190, 495, 590, 1190, 521, 147,
- /* 400 */ 508, 1069, 1069, 1083, 1086, 214, 123, 123, 123, 123,
- /* 410 */ 122, 122, 121, 121, 121, 120, 117, 461, 422, 134,
- /* 420 */ 134, 1224, 1225, 1224, 1224, 1225, 1224, 1353, 1353, 424,
- /* 430 */ 879, 476, 988, 369, 196, 214, 1224, 212, 427, 214,
- /* 440 */ 313, 421, 313, 1224, 1225, 1224, 1595, 401, 410, 149,
- /* 450 */ 424, 553, 416, 358, 527, 220, 126, 127, 81, 1248,
- /* 460 */ 1248, 1082, 1085, 1072, 1072, 124, 124, 125, 125, 125,
- /* 470 */ 125, 424, 297, 33, 1224, 904, 1073, 126, 127, 81,
- /* 480 */ 1248, 1248, 1082, 1085, 1072, 1072, 124, 124, 125, 125,
- /* 490 */ 125, 125, 482, 1224, 1225, 1224, 568, 466, 126, 127,
- /* 500 */ 81, 1248, 1248, 1082, 1085, 1072, 1072, 124, 124, 125,
- /* 510 */ 125, 125, 125, 1224, 150, 123, 123, 123, 123, 122,
- /* 520 */ 122, 121, 121, 121, 120, 117, 461, 1224, 234, 590,
- /* 530 */ 384, 1224, 1225, 1224, 228, 1104, 123, 123, 123, 123,
- /* 540 */ 122, 122, 121, 121, 121, 120, 117, 461, 866, 867,
- /* 550 */ 868, 869, 72, 72, 988, 1623, 413, 123, 123, 123,
- /* 560 */ 123, 122, 122, 121, 121, 121, 120, 117, 461, 443,
- /* 570 */ 1224, 1225, 1224, 1521, 458, 457, 589, 590, 424, 1683,
- /* 580 */ 408, 179, 897, 1253, 1224, 1225, 1224, 1224, 1255, 572,
- /* 590 */ 1646, 295, 295, 458, 457, 1640, 1254, 450, 1322, 424,
- /* 600 */ 136, 136, 474, 1208, 587, 126, 127, 81, 1248, 1248,
- /* 610 */ 1082, 1085, 1072, 1072, 124, 124, 125, 125, 125, 125,
- /* 620 */ 424, 491, 1256, 1256, 1060, 499, 126, 127, 81, 1248,
- /* 630 */ 1248, 1082, 1085, 1072, 1072, 124, 124, 125, 125, 125,
- /* 640 */ 125, 1256, 1256, 5, 1224, 1225, 1224, 126, 127, 81,
- /* 650 */ 1248, 1248, 1082, 1085, 1072, 1072, 124, 124, 125, 125,
- /* 660 */ 125, 125, 99, 433, 123, 123, 123, 123, 122, 122,
- /* 670 */ 121, 121, 121, 120, 117, 461, 101, 900, 265, 1224,
- /* 680 */ 86, 590, 1536, 1224, 513, 123, 123, 123, 123, 122,
- /* 690 */ 122, 121, 121, 121, 120, 117, 461, 538, 538, 590,
- /* 700 */ 1536, 1538, 6, 387, 13, 13, 123, 123, 123, 123,
- /* 710 */ 122, 122, 121, 121, 121, 120, 117, 461, 1059, 441,
- /* 720 */ 1600, 590, 56, 56, 6, 304, 590, 424, 968, 1566,
- /* 730 */ 1190, 1043, 213, 565, 900, 1048, 1224, 1225, 1224, 1047,
- /* 740 */ 1224, 1225, 1224, 1190, 57, 57, 1190, 429, 424, 15,
- /* 750 */ 15, 499, 1047, 145, 126, 127, 81, 1248, 1248, 1082,
- /* 760 */ 1085, 1072, 1072, 124, 124, 125, 125, 125, 125, 424,
- /* 770 */ 590, 550, 1047, 1049, 1536, 126, 127, 81, 1248, 1248,
- /* 780 */ 1082, 1085, 1072, 1072, 124, 124, 125, 125, 125, 125,
- /* 790 */ 233, 3, 473, 72, 72, 1224, 126, 127, 81, 1248,
- /* 800 */ 1248, 1082, 1085, 1072, 1072, 124, 124, 125, 125, 125,
- /* 810 */ 125, 326, 581, 123, 123, 123, 123, 122, 122, 121,
- /* 820 */ 121, 121, 120, 117, 461, 1224, 590, 120, 117, 461,
- /* 830 */ 551, 1224, 493, 367, 123, 123, 123, 123, 122, 122,
- /* 840 */ 121, 121, 121, 120, 117, 461, 1224, 590, 1596, 72,
- /* 850 */ 72, 350, 1224, 1225, 1224, 123, 123, 123, 123, 122,
- /* 860 */ 122, 121, 121, 121, 120, 117, 461, 459, 459, 459,
- /* 870 */ 13, 13, 179, 1171, 1681, 1601, 1681, 1059, 590, 6,
- /* 880 */ 990, 395, 1224, 1225, 1224, 444, 322, 424, 1224, 1225,
- /* 890 */ 1224, 105, 215, 152, 1048, 203, 214, 362, 1047, 365,
- /* 900 */ 1577, 44, 44, 1224, 1225, 1224, 1579, 310, 424, 411,
- /* 910 */ 989, 1047, 108, 469, 126, 127, 81, 1248, 1248, 1082,
- /* 920 */ 1085, 1072, 1072, 124, 124, 125, 125, 125, 125, 424,
- /* 930 */ 1599, 1047, 1049, 892, 6, 126, 127, 81, 1248, 1248,
- /* 940 */ 1082, 1085, 1072, 1072, 124, 124, 125, 125, 125, 125,
- /* 950 */ 1171, 1682, 499, 1682, 12, 1169, 126, 115, 81, 1248,
- /* 960 */ 1248, 1082, 1085, 1072, 1072, 124, 124, 125, 125, 125,
- /* 970 */ 125, 1458, 428, 123, 123, 123, 123, 122, 122, 121,
- /* 980 */ 121, 121, 120, 117, 461, 590, 1391, 321, 563, 563,
- /* 990 */ 1575, 892, 300, 6, 123, 123, 123, 123, 122, 122,
- /* 1000 */ 121, 121, 121, 120, 117, 461, 590, 1474, 72, 72,
- /* 1010 */ 547, 590, 326, 581, 343, 123, 123, 123, 123, 122,
- /* 1020 */ 122, 121, 121, 121, 120, 117, 461, 295, 295, 13,
- /* 1030 */ 13, 561, 1169, 500, 13, 13, 424, 1458, 214, 590,
- /* 1040 */ 587, 438, 341, 114, 312, 323, 382, 1620, 1038, 449,
- /* 1050 */ 560, 467, 311, 386, 130, 505, 145, 424, 590, 1201,
- /* 1060 */ 501, 590, 58, 58, 127, 81, 1248, 1248, 1082, 1085,
- /* 1070 */ 1072, 1072, 124, 124, 125, 125, 125, 125, 339, 1598,
- /* 1080 */ 342, 72, 72, 6, 13, 13, 81, 1248, 1248, 1082,
- /* 1090 */ 1085, 1072, 1072, 124, 124, 125, 125, 125, 125, 206,
- /* 1100 */ 12, 155, 351, 1626, 596, 2, 1279, 439, 330, 98,
- /* 1110 */ 548, 327, 1201, 144, 326, 581, 112, 582, 456, 4,
- /* 1120 */ 1366, 331, 123, 123, 123, 123, 122, 122, 121, 121,
- /* 1130 */ 121, 120, 117, 461, 585, 1038, 518, 590, 386, 549,
- /* 1140 */ 590, 420, 419, 123, 123, 123, 123, 122, 122, 121,
- /* 1150 */ 121, 121, 120, 117, 461, 295, 295, 309, 98, 462,
- /* 1160 */ 13, 13, 340, 13, 13, 1594, 265, 568, 587, 112,
- /* 1170 */ 582, 579, 4, 590, 209, 207, 407, 1269, 567, 483,
- /* 1180 */ 590, 145, 246, 334, 573, 590, 158, 585, 549, 351,
- /* 1190 */ 479, 338, 295, 295, 1458, 920, 72, 72, 1370, 386,
- /* 1200 */ 1059, 8, 590, 45, 45, 587, 110, 110, 59, 59,
- /* 1210 */ 587, 1147, 462, 539, 111, 465, 462, 591, 462, 295,
- /* 1220 */ 295, 1047, 590, 513, 579, 52, 52, 1148, 530, 1131,
- /* 1230 */ 1131, 510, 587, 572, 1047, 429, 921, 1361, 557, 326,
- /* 1240 */ 581, 574, 1149, 556, 1403, 72, 72, 154, 295, 295,
- /* 1250 */ 1594, 372, 513, 1059, 1047, 1049, 1050, 28, 1270, 110,
- /* 1260 */ 110, 587, 540, 1402, 440, 940, 384, 111, 1530, 462,
- /* 1270 */ 591, 462, 295, 295, 1047, 941, 112, 582, 1298, 4,
- /* 1280 */ 541, 292, 460, 988, 513, 587, 478, 1047, 1625, 1212,
- /* 1290 */ 464, 386, 446, 286, 585, 1365, 1473, 1362, 575, 405,
- /* 1300 */ 405, 404, 283, 402, 1472, 453, 876, 1047, 1049, 1050,
- /* 1310 */ 28, 1594, 17, 295, 295, 295, 295, 590, 547, 462,
- /* 1320 */ 240, 1147, 333, 1458, 590, 534, 587, 513, 587, 1358,
- /* 1330 */ 332, 579, 590, 295, 295, 382, 1620, 1148, 1583, 156,
- /* 1340 */ 60, 60, 1458, 382, 1620, 557, 587, 61, 61, 477,
- /* 1350 */ 558, 489, 1149, 963, 434, 62, 62, 475, 962, 421,
- /* 1360 */ 1059, 475, 242, 407, 1170, 590, 110, 110, 590, 344,
- /* 1370 */ 172, 228, 360, 143, 111, 578, 462, 591, 462, 234,
- /* 1380 */ 1651, 1047, 929, 112, 582, 1555, 4, 222, 63, 63,
- /* 1390 */ 241, 46, 46, 502, 1047, 303, 1212, 464, 590, 303,
- /* 1400 */ 286, 585, 299, 1594, 1389, 988, 405, 405, 404, 283,
- /* 1410 */ 402, 590, 509, 876, 1047, 1049, 1050, 28, 548, 1304,
- /* 1420 */ 430, 47, 47, 1554, 590, 423, 462, 240, 1227, 333,
- /* 1430 */ 1458, 326, 581, 286, 48, 48, 329, 332, 579, 405,
- /* 1440 */ 405, 404, 283, 402, 503, 1270, 876, 50, 50, 497,
- /* 1450 */ 112, 582, 557, 4, 470, 583, 430, 556, 326, 581,
- /* 1460 */ 240, 1243, 333, 289, 289, 468, 590, 1059, 585, 242,
- /* 1470 */ 332, 590, 486, 110, 110, 590, 587, 172, 431, 180,
- /* 1480 */ 143, 111, 421, 462, 591, 462, 1227, 243, 1047, 51,
- /* 1490 */ 51, 590, 223, 462, 64, 64, 590, 241, 65, 65,
- /* 1500 */ 454, 1047, 242, 296, 296, 579, 264, 263, 262, 1002,
- /* 1510 */ 172, 239, 590, 143, 66, 66, 587, 1003, 490, 14,
- /* 1520 */ 14, 1047, 1049, 1050, 28, 271, 112, 582, 421, 4,
- /* 1530 */ 241, 109, 423, 107, 1059, 67, 67, 325, 326, 581,
- /* 1540 */ 110, 110, 967, 590, 585, 294, 232, 421, 111, 498,
- /* 1550 */ 462, 591, 462, 590, 485, 1047, 87, 219, 1166, 1264,
- /* 1560 */ 409, 470, 590, 1244, 907, 423, 132, 132, 1047, 462,
- /* 1570 */ 31, 326, 581, 590, 963, 590, 133, 133, 348, 962,
- /* 1580 */ 356, 579, 223, 590, 162, 68, 68, 506, 1047, 1049,
- /* 1590 */ 1050, 28, 919, 918, 470, 590, 53, 53, 69, 69,
- /* 1600 */ 926, 927, 80, 582, 32, 4, 70, 70, 245, 448,
- /* 1610 */ 1059, 590, 507, 590, 373, 1399, 110, 110, 54, 54,
- /* 1620 */ 585, 1244, 907, 595, 111, 1279, 462, 591, 462, 590,
- /* 1630 */ 327, 1047, 144, 947, 165, 165, 166, 166, 590, 1366,
- /* 1640 */ 153, 361, 39, 364, 1047, 462, 349, 590, 101, 590,
- /* 1650 */ 948, 570, 77, 77, 366, 543, 487, 579, 519, 590,
- /* 1660 */ 267, 55, 55, 368, 1047, 1049, 1050, 28, 1125, 1125,
- /* 1670 */ 73, 73, 135, 135, 295, 295, 1124, 1124, 112, 582,
- /* 1680 */ 306, 4, 74, 74, 380, 590, 1059, 587, 529, 1040,
- /* 1690 */ 1346, 270, 110, 110, 379, 492, 585, 270, 1333, 590,
- /* 1700 */ 111, 246, 462, 591, 462, 1330, 445, 1047, 163, 163,
- /* 1710 */ 535, 1332, 279, 298, 381, 532, 376, 531, 266, 1113,
- /* 1720 */ 1047, 462, 137, 137, 372, 1331, 590, 569, 494, 590,
- /* 1730 */ 270, 590, 375, 579, 465, 590, 1175, 590, 1005, 1006,
- /* 1740 */ 1047, 1049, 1050, 28, 385, 1412, 354, 590, 101, 131,
- /* 1750 */ 131, 1457, 164, 164, 157, 157, 205, 1385, 141, 141,
- /* 1760 */ 140, 140, 1059, 590, 960, 590, 114, 1397, 110, 110,
- /* 1770 */ 138, 138, 1051, 370, 590, 101, 111, 1113, 462, 591,
- /* 1780 */ 462, 1614, 590, 1047, 576, 577, 139, 139, 76, 76,
- /* 1790 */ 161, 590, 101, 1109, 1462, 267, 1047, 78, 78, 590,
- /* 1800 */ 993, 890, 270, 151, 1311, 75, 75, 961, 1302, 114,
- /* 1810 */ 1301, 1289, 1288, 406, 43, 43, 1047, 1049, 1050, 28,
- /* 1820 */ 1290, 1633, 49, 49, 514, 217, 1382, 11, 287, 238,
- /* 1830 */ 1051, 318, 319, 320, 1439, 225, 1444, 346, 301, 1449,
- /* 1840 */ 1432, 347, 496, 307, 352, 229, 1448, 1394, 1329, 524,
- /* 1850 */ 414, 378, 1527, 1526, 210, 400, 211, 224, 1636, 1395,
- /* 1860 */ 580, 1393, 1392, 1264, 182, 274, 1574, 236, 1261, 1572,
- /* 1870 */ 432, 86, 221, 193, 1532, 186, 1445, 82, 36, 177,
- /* 1880 */ 480, 85, 188, 189, 247, 190, 191, 481, 517, 249,
- /* 1890 */ 99, 1453, 197, 198, 37, 504, 412, 488, 1451, 415,
- /* 1900 */ 355, 1519, 1450, 253, 255, 92, 512, 202, 288, 257,
- /* 1910 */ 515, 363, 258, 417, 1291, 259, 533, 1349, 1340, 1348,
- /* 1920 */ 1347, 447, 1543, 94, 911, 359, 230, 1650, 451, 1318,
- /* 1930 */ 1649, 452, 272, 273, 455, 1319, 418, 377, 1417, 316,
- /* 1940 */ 1416, 1317, 1648, 317, 129, 542, 1375, 383, 1339, 1619,
- /* 1950 */ 568, 10, 106, 1506, 394, 100, 324, 552, 1605, 35,
- /* 1960 */ 1604, 593, 1218, 285, 282, 284, 594, 1286, 1280, 425,
- /* 1970 */ 167, 426, 181, 168, 1559, 1560, 392, 216, 1374, 148,
- /* 1980 */ 398, 399, 226, 862, 463, 169, 1558, 314, 218, 170,
- /* 1990 */ 1557, 328, 183, 184, 237, 227, 79, 146, 1123, 1121,
- /* 2000 */ 336, 185, 173, 1243, 187, 943, 345, 244, 248, 1137,
- /* 2010 */ 192, 174, 175, 88, 435, 89, 194, 90, 91, 176,
- /* 2020 */ 251, 1140, 437, 250, 1136, 159, 270, 18, 252, 357,
- /* 2030 */ 442, 254, 1258, 511, 1129, 199, 256, 200, 38, 878,
- /* 2040 */ 379, 516, 260, 520, 525, 201, 528, 93, 19, 909,
- /* 2050 */ 371, 20, 374, 95, 178, 160, 96, 536, 40, 922,
- /* 2060 */ 1206, 1088, 315, 1177, 97, 1176, 231, 291, 21, 293,
- /* 2070 */ 997, 204, 991, 114, 1196, 1200, 269, 22, 23, 1181,
- /* 2080 */ 24, 7, 25, 1194, 1192, 1199, 26, 34, 564, 27,
- /* 2090 */ 103, 208, 101, 1102, 104, 1089, 1087, 1091, 1146, 1092,
- /* 2100 */ 1145, 275, 276, 29, 41, 277, 1052, 891, 113, 30,
- /* 2110 */ 586, 956, 278, 1641, 171, 142, 403, 1214, 1213,
+ /* 0 */ 594, 1314, 594, 501, 594, 128, 125, 236, 594, 1323,
+ /* 10 */ 495, 596, 594, 596, 1326, 128, 125, 236, 391, 594,
+ /* 20 */ 425, 594, 515, 51, 51, 51, 51, 81, 81, 495,
+ /* 30 */ 575, 81, 81, 1011, 301, 81, 81, 1580, 1661, 1366,
+ /* 40 */ 1366, 1012, 81, 81, 51, 51, 1333, 135, 136, 90,
+ /* 50 */ 1259, 1259, 1091, 1094, 1081, 1081, 133, 133, 134, 134,
+ /* 60 */ 134, 134, 425, 392, 574, 296, 296, 428, 574, 296,
+ /* 70 */ 296, 1381, 574, 548, 128, 125, 236, 573, 591, 574,
+ /* 80 */ 579, 451, 591, 591, 579, 579, 303, 547, 576, 135,
+ /* 90 */ 136, 90, 1259, 1259, 1091, 1094, 1081, 1081, 133, 133,
+ /* 100 */ 134, 134, 134, 134, 305, 306, 132, 132, 132, 132,
+ /* 110 */ 131, 131, 130, 130, 130, 129, 126, 463, 1235, 128,
+ /* 120 */ 125, 236, 296, 296, 1621, 390, 1623, 468, 389, 216,
+ /* 130 */ 1047, 1314, 1205, 425, 1205, 591, 478, 579, 44, 111,
+ /* 140 */ 269, 233, 411, 1311, 414, 1621, 561, 422, 132, 132,
+ /* 150 */ 132, 132, 131, 131, 130, 130, 130, 129, 126, 463,
+ /* 160 */ 135, 136, 90, 1259, 1259, 1091, 1094, 1081, 1081, 133,
+ /* 170 */ 133, 134, 134, 134, 134, 1235, 1236, 1235, 262, 296,
+ /* 180 */ 296, 528, 525, 524, 352, 546, 137, 873, 874, 875,
+ /* 190 */ 876, 523, 591, 44, 579, 6, 327, 585, 1235, 131,
+ /* 200 */ 131, 130, 130, 130, 129, 126, 463, 425, 22, 22,
+ /* 210 */ 493, 134, 134, 134, 134, 127, 588, 588, 588, 132,
+ /* 220 */ 132, 132, 132, 131, 131, 130, 130, 130, 129, 126,
+ /* 230 */ 463, 198, 475, 501, 135, 136, 90, 1259, 1259, 1091,
+ /* 240 */ 1094, 1081, 1081, 133, 133, 134, 134, 134, 134, 425,
+ /* 250 */ 291, 327, 585, 385, 93, 1235, 1236, 1235, 92, 132,
+ /* 260 */ 132, 132, 132, 131, 131, 130, 130, 130, 129, 126,
+ /* 270 */ 463, 1235, 486, 354, 1235, 502, 135, 136, 90, 1259,
+ /* 280 */ 1259, 1091, 1094, 1081, 1081, 133, 133, 134, 134, 134,
+ /* 290 */ 134, 95, 444, 132, 132, 132, 132, 131, 131, 130,
+ /* 300 */ 130, 130, 129, 126, 463, 130, 130, 130, 129, 126,
+ /* 310 */ 463, 1471, 128, 125, 236, 1607, 164, 139, 182, 229,
+ /* 320 */ 425, 134, 134, 134, 134, 199, 282, 281, 1235, 1236,
+ /* 330 */ 1235, 1235, 1236, 1235, 351, 132, 132, 132, 132, 131,
+ /* 340 */ 131, 130, 130, 130, 129, 126, 463, 135, 136, 90,
+ /* 350 */ 1259, 1259, 1091, 1094, 1081, 1081, 133, 133, 134, 134,
+ /* 360 */ 134, 134, 1235, 48, 592, 1235, 964, 964, 1235, 132,
+ /* 370 */ 132, 132, 132, 131, 131, 130, 130, 130, 129, 126,
+ /* 380 */ 463, 45, 439, 132, 132, 132, 132, 131, 131, 130,
+ /* 390 */ 130, 130, 129, 126, 463, 460, 459, 1078, 1078, 1092,
+ /* 400 */ 1095, 231, 539, 310, 421, 420, 132, 132, 132, 132,
+ /* 410 */ 131, 131, 130, 130, 130, 129, 126, 463, 216, 1235,
+ /* 420 */ 1236, 1235, 1235, 1236, 1235, 1235, 1236, 1235, 1608, 425,
+ /* 430 */ 387, 412, 182, 370, 40, 1235, 540, 540, 296, 296,
+ /* 440 */ 224, 7, 537, 1267, 1267, 429, 1180, 1696, 46, 1696,
+ /* 450 */ 425, 591, 155, 579, 529, 221, 135, 136, 90, 1259,
+ /* 460 */ 1259, 1091, 1094, 1081, 1081, 133, 133, 134, 134, 134,
+ /* 470 */ 134, 425, 1082, 1325, 1235, 911, 495, 135, 136, 90,
+ /* 480 */ 1259, 1259, 1091, 1094, 1081, 1081, 133, 133, 134, 134,
+ /* 490 */ 134, 134, 1235, 1236, 1235, 5, 327, 585, 135, 136,
+ /* 500 */ 90, 1259, 1259, 1091, 1094, 1081, 1081, 133, 133, 134,
+ /* 510 */ 134, 134, 134, 408, 1280, 132, 132, 132, 132, 131,
+ /* 520 */ 131, 130, 130, 130, 129, 126, 463, 1235, 1178, 507,
+ /* 530 */ 1471, 1235, 1236, 1235, 503, 1235, 132, 132, 132, 132,
+ /* 540 */ 131, 131, 130, 130, 130, 129, 126, 463, 463, 594,
+ /* 550 */ 565, 565, 309, 594, 1372, 7, 594, 132, 132, 132,
+ /* 560 */ 132, 131, 131, 130, 130, 130, 129, 126, 463, 327,
+ /* 570 */ 585, 434, 19, 19, 460, 459, 19, 19, 425, 143,
+ /* 580 */ 143, 545, 904, 1264, 1235, 1236, 1235, 437, 1266, 296,
+ /* 590 */ 296, 442, 1235, 1236, 1235, 1281, 1265, 1364, 1364, 425,
+ /* 600 */ 495, 440, 591, 1218, 579, 135, 136, 90, 1259, 1259,
+ /* 610 */ 1091, 1094, 1081, 1081, 133, 133, 134, 134, 134, 134,
+ /* 620 */ 425, 594, 1267, 1267, 1069, 567, 135, 136, 90, 1259,
+ /* 630 */ 1259, 1091, 1094, 1081, 1081, 133, 133, 134, 134, 134,
+ /* 640 */ 134, 338, 3, 336, 81, 81, 1047, 135, 136, 90,
+ /* 650 */ 1259, 1259, 1091, 1094, 1081, 1081, 133, 133, 134, 134,
+ /* 660 */ 134, 134, 1184, 44, 132, 132, 132, 132, 131, 131,
+ /* 670 */ 130, 130, 130, 129, 126, 463, 311, 1607, 972, 474,
+ /* 680 */ 594, 553, 1235, 971, 1309, 132, 132, 132, 132, 131,
+ /* 690 */ 131, 130, 130, 130, 129, 126, 463, 474, 473, 497,
+ /* 700 */ 352, 481, 339, 19, 19, 594, 132, 132, 132, 132,
+ /* 710 */ 131, 131, 130, 130, 130, 129, 126, 463, 445, 296,
+ /* 720 */ 296, 327, 585, 1698, 409, 50, 594, 425, 19, 19,
+ /* 730 */ 1667, 1052, 591, 262, 579, 1544, 528, 525, 524, 1235,
+ /* 740 */ 1236, 1235, 1610, 313, 1180, 1697, 523, 1697, 425, 145,
+ /* 750 */ 145, 461, 461, 461, 135, 136, 90, 1259, 1259, 1091,
+ /* 760 */ 1094, 1081, 1081, 133, 133, 134, 134, 134, 134, 425,
+ /* 770 */ 594, 10, 474, 272, 1637, 135, 136, 90, 1259, 1259,
+ /* 780 */ 1091, 1094, 1081, 1081, 133, 133, 134, 134, 134, 134,
+ /* 790 */ 1608, 1616, 387, 81, 81, 7, 135, 136, 90, 1259,
+ /* 800 */ 1259, 1091, 1094, 1081, 1081, 133, 133, 134, 134, 134,
+ /* 810 */ 134, 1255, 216, 132, 132, 132, 132, 131, 131, 130,
+ /* 820 */ 130, 130, 129, 126, 463, 469, 1178, 110, 886, 594,
+ /* 830 */ 323, 515, 543, 501, 132, 132, 132, 132, 131, 131,
+ /* 840 */ 130, 130, 130, 129, 126, 463, 1235, 594, 577, 1238,
+ /* 850 */ 594, 359, 81, 81, 594, 132, 132, 132, 132, 131,
+ /* 860 */ 131, 130, 130, 130, 129, 126, 463, 296, 296, 1255,
+ /* 870 */ 19, 19, 385, 19, 19, 1607, 1579, 65, 65, 593,
+ /* 880 */ 591, 1200, 579, 296, 296, 450, 594, 425, 208, 324,
+ /* 890 */ 484, 114, 217, 216, 1200, 977, 591, 1200, 579, 1404,
+ /* 900 */ 322, 402, 388, 1235, 1236, 1235, 417, 1238, 425, 80,
+ /* 910 */ 80, 454, 117, 1549, 135, 136, 90, 1259, 1259, 1091,
+ /* 920 */ 1094, 1081, 1081, 133, 133, 134, 134, 134, 134, 425,
+ /* 930 */ 552, 1549, 1551, 1113, 312, 135, 136, 90, 1259, 1259,
+ /* 940 */ 1091, 1094, 1081, 1081, 133, 133, 134, 134, 134, 134,
+ /* 950 */ 129, 126, 463, 549, 1235, 234, 135, 124, 90, 1259,
+ /* 960 */ 1259, 1091, 1094, 1081, 1081, 133, 133, 134, 134, 134,
+ /* 970 */ 134, 1534, 397, 132, 132, 132, 132, 131, 131, 130,
+ /* 980 */ 130, 130, 129, 126, 463, 594, 907, 1607, 1609, 1471,
+ /* 990 */ 387, 398, 1607, 394, 132, 132, 132, 132, 131, 131,
+ /* 1000 */ 130, 130, 130, 129, 126, 463, 1549, 594, 66, 66,
+ /* 1010 */ 396, 1235, 1236, 1235, 272, 132, 132, 132, 132, 131,
+ /* 1020 */ 131, 130, 130, 130, 129, 126, 463, 1068, 1471, 1068,
+ /* 1030 */ 19, 19, 1361, 1590, 1340, 47, 425, 368, 1200, 999,
+ /* 1040 */ 49, 1471, 1361, 907, 1057, 209, 1057, 1592, 1056, 557,
+ /* 1050 */ 1056, 1200, 1255, 550, 1200, 594, 471, 425, 408, 1179,
+ /* 1060 */ 441, 1056, 1135, 1056, 136, 90, 1259, 1259, 1091, 1094,
+ /* 1070 */ 1081, 1081, 133, 133, 134, 134, 134, 134, 81, 81,
+ /* 1080 */ 1235, 1056, 1058, 1056, 1058, 476, 90, 1259, 1259, 1091,
+ /* 1090 */ 1094, 1081, 1081, 133, 133, 134, 134, 134, 134, 504,
+ /* 1100 */ 1608, 363, 387, 366, 1156, 1608, 107, 387, 556, 1219,
+ /* 1110 */ 1255, 1219, 511, 997, 229, 457, 121, 586, 594, 4,
+ /* 1120 */ 1157, 300, 132, 132, 132, 132, 131, 131, 130, 130,
+ /* 1130 */ 130, 129, 126, 463, 589, 1158, 551, 1235, 1236, 1235,
+ /* 1140 */ 1281, 19, 19, 132, 132, 132, 132, 131, 131, 130,
+ /* 1150 */ 130, 130, 129, 126, 463, 330, 569, 6, 947, 464,
+ /* 1160 */ 563, 290, 290, 1588, 344, 998, 594, 216, 948, 121,
+ /* 1170 */ 586, 583, 4, 594, 591, 293, 579, 997, 567, 562,
+ /* 1180 */ 423, 44, 486, 354, 470, 549, 1344, 589, 1211, 81,
+ /* 1190 */ 81, 331, 342, 1140, 1140, 512, 81, 81, 1315, 431,
+ /* 1200 */ 1068, 9, 314, 927, 314, 1487, 119, 119, 1486, 235,
+ /* 1210 */ 297, 297, 464, 599, 120, 1290, 464, 595, 464, 332,
+ /* 1220 */ 328, 1056, 152, 591, 583, 579, 458, 594, 340, 1377,
+ /* 1230 */ 343, 244, 211, 462, 1056, 997, 532, 485, 559, 327,
+ /* 1240 */ 585, 1211, 108, 558, 928, 383, 1634, 1402, 383, 1634,
+ /* 1250 */ 21, 21, 1156, 1068, 1056, 1058, 1059, 35, 1614, 119,
+ /* 1260 */ 119, 1485, 7, 240, 296, 296, 434, 120, 1157, 464,
+ /* 1270 */ 595, 464, 1471, 235, 1056, 121, 586, 591, 4, 579,
+ /* 1280 */ 954, 449, 1219, 1158, 107, 550, 374, 1056, 1641, 600,
+ /* 1290 */ 2, 1290, 247, 589, 568, 568, 328, 955, 152, 997,
+ /* 1300 */ 447, 383, 1634, 594, 1235, 1377, 582, 1056, 1058, 1059,
+ /* 1310 */ 35, 1275, 341, 515, 551, 594, 1137, 536, 464, 1615,
+ /* 1320 */ 1137, 1200, 434, 7, 594, 467, 53, 53, 121, 586,
+ /* 1330 */ 583, 4, 564, 594, 1200, 1219, 214, 1200, 67, 67,
+ /* 1340 */ 296, 296, 158, 455, 559, 972, 589, 54, 54, 560,
+ /* 1350 */ 971, 1200, 246, 591, 510, 579, 68, 68, 1543, 1068,
+ /* 1360 */ 531, 1235, 1236, 1235, 1200, 119, 119, 1200, 247, 381,
+ /* 1370 */ 477, 464, 515, 120, 477, 464, 595, 464, 446, 380,
+ /* 1380 */ 1056, 520, 899, 583, 280, 299, 382, 534, 377, 533,
+ /* 1390 */ 267, 555, 215, 1056, 515, 1613, 373, 559, 594, 7,
+ /* 1400 */ 594, 467, 558, 265, 264, 263, 304, 515, 594, 123,
+ /* 1410 */ 304, 266, 1068, 1056, 1058, 1059, 35, 1373, 119, 119,
+ /* 1420 */ 570, 69, 69, 70, 70, 594, 120, 594, 464, 595,
+ /* 1430 */ 464, 71, 71, 1056, 587, 431, 432, 183, 156, 1369,
+ /* 1440 */ 899, 1219, 1640, 1223, 466, 499, 1056, 287, 72, 72,
+ /* 1450 */ 55, 55, 361, 406, 406, 405, 284, 403, 207, 1612,
+ /* 1460 */ 883, 479, 594, 7, 488, 594, 1056, 1058, 1059, 35,
+ /* 1470 */ 335, 492, 422, 541, 241, 422, 334, 96, 220, 594,
+ /* 1480 */ 430, 594, 422, 594, 333, 61, 61, 594, 56, 56,
+ /* 1490 */ 594, 1011, 295, 233, 1219, 266, 373, 121, 586, 1012,
+ /* 1500 */ 4, 110, 57, 57, 59, 59, 60, 60, 296, 296,
+ /* 1510 */ 73, 73, 594, 74, 74, 589, 243, 326, 1666, 594,
+ /* 1520 */ 936, 591, 542, 579, 175, 594, 487, 43, 422, 118,
+ /* 1530 */ 594, 116, 594, 570, 489, 75, 75, 594, 1254, 594,
+ /* 1540 */ 464, 1416, 20, 20, 242, 500, 914, 1415, 76, 76,
+ /* 1550 */ 349, 480, 583, 141, 141, 142, 142, 491, 307, 594,
+ /* 1560 */ 77, 77, 62, 62, 430, 1286, 1, 1, 600, 2,
+ /* 1570 */ 1290, 1376, 159, 38, 16, 328, 1596, 152, 1175, 424,
+ /* 1580 */ 410, 1068, 78, 78, 1377, 327, 585, 119, 119, 976,
+ /* 1590 */ 350, 23, 110, 223, 1049, 120, 271, 464, 595, 464,
+ /* 1600 */ 121, 586, 1056, 4, 914, 918, 594, 39, 472, 494,
+ /* 1610 */ 496, 271, 271, 926, 925, 1056, 594, 345, 589, 296,
+ /* 1620 */ 296, 594, 355, 1568, 110, 594, 521, 594, 268, 79,
+ /* 1630 */ 79, 298, 591, 435, 579, 1056, 1058, 1059, 35, 63,
+ /* 1640 */ 63, 594, 1343, 464, 168, 168, 594, 247, 169, 169,
+ /* 1650 */ 86, 86, 594, 1567, 594, 583, 933, 934, 594, 224,
+ /* 1660 */ 371, 505, 110, 1219, 64, 64, 163, 357, 110, 82,
+ /* 1670 */ 82, 594, 1118, 1122, 268, 144, 144, 83, 83, 508,
+ /* 1680 */ 467, 166, 166, 594, 1068, 594, 581, 594, 1014, 1015,
+ /* 1690 */ 119, 119, 1134, 1134, 146, 146, 594, 1002, 120, 271,
+ /* 1700 */ 464, 595, 464, 594, 509, 1056, 140, 140, 167, 167,
+ /* 1710 */ 160, 160, 89, 586, 970, 4, 123, 1412, 1056, 150,
+ /* 1720 */ 150, 594, 967, 594, 123, 572, 149, 149, 594, 1060,
+ /* 1730 */ 589, 1122, 897, 594, 157, 594, 362, 594, 1056, 1058,
+ /* 1740 */ 1059, 35, 1133, 1133, 147, 147, 148, 148, 365, 367,
+ /* 1750 */ 594, 85, 85, 369, 1655, 464, 87, 87, 84, 84,
+ /* 1760 */ 52, 52, 969, 1342, 123, 1628, 1219, 583, 1357, 1341,
+ /* 1770 */ 376, 386, 1425, 58, 58, 1470, 1398, 288, 1410, 580,
+ /* 1780 */ 1475, 516, 1395, 165, 1322, 1313, 1312, 1060, 1300, 1299,
+ /* 1790 */ 1301, 1648, 407, 12, 226, 319, 1068, 1457, 239, 1452,
+ /* 1800 */ 1445, 320, 119, 119, 321, 348, 302, 347, 1462, 308,
+ /* 1810 */ 120, 353, 464, 595, 464, 1223, 466, 1056, 1461, 287,
+ /* 1820 */ 526, 415, 498, 230, 1340, 406, 406, 405, 284, 403,
+ /* 1830 */ 1056, 1407, 883, 1408, 287, 379, 1540, 571, 1539, 1651,
+ /* 1840 */ 406, 406, 405, 284, 403, 584, 241, 883, 334, 1275,
+ /* 1850 */ 1056, 1058, 1059, 35, 225, 401, 333, 212, 213, 275,
+ /* 1860 */ 1587, 241, 1585, 334, 1406, 1272, 185, 1405, 237, 121,
+ /* 1870 */ 586, 333, 4, 433, 95, 222, 1458, 91, 1219, 196,
+ /* 1880 */ 180, 189, 482, 483, 519, 191, 192, 589, 243, 13,
+ /* 1890 */ 250, 248, 193, 194, 108, 1464, 175, 413, 1463, 43,
+ /* 1900 */ 1545, 14, 1466, 243, 490, 416, 200, 1532, 201, 94,
+ /* 1910 */ 506, 175, 464, 356, 43, 254, 242, 256, 101, 514,
+ /* 1920 */ 1556, 289, 360, 205, 583, 258, 517, 364, 259, 418,
+ /* 1930 */ 1302, 242, 260, 1360, 535, 448, 1351, 1359, 1358, 103,
+ /* 1940 */ 918, 1350, 231, 452, 1633, 544, 1330, 1665, 453, 1664,
+ /* 1950 */ 378, 424, 419, 1068, 1329, 1328, 1663, 327, 585, 119,
+ /* 1960 */ 119, 384, 317, 318, 273, 274, 424, 120, 456, 464,
+ /* 1970 */ 595, 464, 327, 585, 1056, 138, 1430, 1619, 570, 11,
+ /* 1980 */ 472, 1519, 395, 1618, 325, 115, 1386, 1056, 393, 109,
+ /* 1990 */ 554, 1385, 400, 218, 399, 472, 42, 597, 1229, 283,
+ /* 2000 */ 285, 1429, 286, 598, 1297, 1291, 426, 1056, 1058, 1059,
+ /* 2010 */ 35, 427, 1572, 184, 170, 171, 1573, 1571, 154, 315,
+ /* 2020 */ 869, 465, 1570, 172, 227, 219, 329, 173, 186, 228,
+ /* 2030 */ 88, 187, 153, 238, 1132, 1219, 337, 1130, 176, 188,
+ /* 2040 */ 1254, 190, 950, 346, 245, 249, 1146, 177, 195, 178,
+ /* 2050 */ 436, 197, 97, 179, 98, 99, 100, 1149, 251, 438,
+ /* 2060 */ 252, 1145, 161, 271, 24, 253, 1138, 358, 443, 255,
+ /* 2070 */ 1269, 513, 202, 257, 203, 15, 885, 380, 518, 261,
+ /* 2080 */ 522, 375, 204, 530, 102, 25, 181, 372, 26, 104,
+ /* 2090 */ 916, 162, 105, 538, 929, 527, 316, 1216, 1097, 232,
+ /* 2100 */ 1186, 106, 17, 206, 27, 1185, 292, 294, 1006, 1000,
+ /* 2110 */ 123, 1206, 1210, 270, 28, 1191, 41, 29, 210, 1204,
+ /* 2120 */ 8, 30, 31, 1202, 32, 566, 33, 1209, 110, 112,
+ /* 2130 */ 1111, 1098, 1096, 113, 1100, 34, 1101, 578, 1155, 276,
+ /* 2140 */ 1154, 277, 36, 18, 404, 1061, 898, 963, 122, 37,
+ /* 2150 */ 1225, 278, 279, 590, 1656, 174, 151, 1224,
};
static const YYCODETYPE yy_lookahead[] = {
- /* 0 */ 277, 278, 279, 196, 226, 196, 228, 196, 196, 196,
- /* 10 */ 252, 196, 254, 196, 236, 196, 277, 278, 279, 196,
- /* 20 */ 20, 196, 299, 213, 214, 215, 219, 220, 219, 220,
- /* 30 */ 222, 219, 220, 33, 219, 220, 219, 220, 219, 220,
- /* 40 */ 219, 41, 219, 220, 219, 220, 234, 47, 48, 49,
+ /* 0 */ 197, 197, 197, 197, 197, 279, 280, 281, 197, 220,
+ /* 10 */ 197, 207, 197, 209, 220, 279, 280, 281, 223, 197,
+ /* 20 */ 20, 197, 197, 220, 221, 220, 221, 220, 221, 197,
+ /* 30 */ 208, 220, 221, 33, 208, 220, 221, 301, 219, 239,
+ /* 40 */ 240, 41, 220, 221, 220, 221, 227, 47, 48, 49,
/* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- /* 60 */ 60, 61, 20, 196, 188, 189, 190, 191, 192, 193,
- /* 70 */ 196, 256, 219, 256, 198, 208, 200, 238, 239, 264,
- /* 80 */ 206, 264, 208, 207, 271, 277, 278, 279, 207, 47,
+ /* 60 */ 60, 61, 20, 223, 257, 243, 244, 242, 257, 243,
+ /* 70 */ 244, 244, 257, 266, 279, 280, 281, 266, 256, 257,
+ /* 80 */ 258, 266, 256, 256, 258, 258, 273, 208, 266, 47,
/* 90 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- /* 100 */ 58, 59, 60, 61, 281, 219, 106, 107, 108, 109,
- /* 110 */ 110, 111, 112, 113, 114, 115, 116, 117, 242, 243,
- /* 120 */ 222, 310, 311, 242, 243, 318, 319, 318, 26, 320,
- /* 130 */ 80, 255, 90, 20, 92, 196, 255, 318, 319, 26,
- /* 140 */ 259, 260, 196, 93, 85, 269, 96, 117, 106, 107,
+ /* 100 */ 58, 59, 60, 61, 298, 273, 106, 107, 108, 109,
+ /* 110 */ 110, 111, 112, 113, 114, 115, 116, 117, 63, 279,
+ /* 120 */ 280, 281, 243, 244, 321, 322, 321, 302, 323, 197,
+ /* 130 */ 77, 197, 90, 20, 92, 256, 248, 258, 85, 26,
+ /* 140 */ 261, 262, 210, 209, 208, 321, 322, 259, 106, 107,
/* 150 */ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
/* 160 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 170 */ 57, 58, 59, 60, 61, 277, 278, 279, 302, 112,
- /* 180 */ 113, 114, 115, 116, 117, 139, 73, 141, 142, 216,
- /* 190 */ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
- /* 200 */ 116, 117, 143, 144, 265, 123, 12, 20, 126, 127,
- /* 210 */ 128, 58, 59, 60, 61, 62, 23, 271, 136, 106,
+ /* 170 */ 57, 58, 59, 60, 61, 120, 121, 122, 123, 243,
+ /* 180 */ 244, 126, 127, 128, 131, 197, 73, 7, 8, 9,
+ /* 190 */ 10, 136, 256, 85, 258, 217, 143, 144, 63, 110,
+ /* 200 */ 111, 112, 113, 114, 115, 116, 117, 20, 220, 221,
+ /* 210 */ 274, 58, 59, 60, 61, 62, 214, 215, 216, 106,
/* 220 */ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- /* 230 */ 117, 23, 130, 25, 47, 48, 49, 50, 51, 52,
+ /* 230 */ 117, 23, 124, 197, 47, 48, 49, 50, 51, 52,
/* 240 */ 53, 54, 55, 56, 57, 58, 59, 60, 61, 20,
- /* 250 */ 277, 278, 279, 313, 25, 233, 63, 317, 71, 106,
+ /* 250 */ 217, 143, 144, 197, 25, 120, 121, 122, 71, 106,
/* 260 */ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- /* 270 */ 117, 63, 196, 196, 132, 133, 47, 48, 49, 50,
+ /* 270 */ 117, 63, 132, 133, 63, 297, 47, 48, 49, 50,
/* 280 */ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- /* 290 */ 61, 214, 215, 106, 107, 108, 109, 110, 111, 112,
- /* 300 */ 113, 114, 115, 116, 117, 110, 111, 112, 113, 114,
- /* 310 */ 115, 116, 117, 120, 121, 122, 196, 80, 169, 170,
- /* 320 */ 20, 58, 59, 60, 61, 63, 132, 133, 91, 121,
- /* 330 */ 93, 27, 28, 96, 196, 106, 107, 108, 109, 110,
+ /* 290 */ 61, 156, 236, 106, 107, 108, 109, 110, 111, 112,
+ /* 300 */ 113, 114, 115, 116, 117, 112, 113, 114, 115, 116,
+ /* 310 */ 117, 197, 279, 280, 281, 197, 24, 23, 197, 26,
+ /* 320 */ 20, 58, 59, 60, 61, 23, 27, 28, 120, 121,
+ /* 330 */ 122, 120, 121, 122, 298, 106, 107, 108, 109, 110,
/* 340 */ 111, 112, 113, 114, 115, 116, 117, 47, 48, 49,
/* 350 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- /* 360 */ 60, 61, 31, 287, 63, 288, 35, 63, 196, 106,
+ /* 360 */ 60, 61, 63, 245, 139, 63, 141, 142, 63, 106,
/* 370 */ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- /* 380 */ 117, 80, 120, 121, 122, 123, 63, 150, 126, 127,
- /* 390 */ 128, 271, 91, 196, 93, 196, 196, 96, 136, 76,
- /* 400 */ 69, 50, 51, 52, 53, 196, 106, 107, 108, 109,
- /* 410 */ 110, 111, 112, 113, 114, 115, 116, 117, 209, 219,
- /* 420 */ 220, 120, 121, 122, 120, 121, 122, 238, 239, 20,
- /* 430 */ 22, 247, 26, 24, 23, 196, 63, 265, 241, 196,
- /* 440 */ 231, 257, 233, 120, 121, 122, 308, 204, 209, 76,
- /* 450 */ 20, 150, 209, 45, 24, 155, 47, 48, 49, 50,
+ /* 380 */ 117, 76, 268, 106, 107, 108, 109, 110, 111, 112,
+ /* 390 */ 113, 114, 115, 116, 117, 110, 111, 50, 51, 52,
+ /* 400 */ 53, 169, 170, 208, 110, 111, 106, 107, 108, 109,
+ /* 410 */ 110, 111, 112, 113, 114, 115, 116, 117, 197, 120,
+ /* 420 */ 121, 122, 120, 121, 122, 120, 121, 122, 310, 20,
+ /* 430 */ 312, 210, 197, 24, 23, 63, 315, 316, 243, 244,
+ /* 440 */ 147, 320, 150, 158, 159, 202, 23, 24, 76, 26,
+ /* 450 */ 20, 256, 26, 258, 24, 155, 47, 48, 49, 50,
/* 460 */ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- /* 470 */ 61, 20, 23, 23, 63, 24, 125, 47, 48, 49,
+ /* 470 */ 61, 20, 125, 220, 63, 24, 197, 47, 48, 49,
/* 480 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- /* 490 */ 60, 61, 84, 120, 121, 122, 150, 300, 47, 48,
+ /* 490 */ 60, 61, 120, 121, 122, 23, 143, 144, 47, 48,
/* 500 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- /* 510 */ 59, 60, 61, 63, 168, 106, 107, 108, 109, 110,
- /* 520 */ 111, 112, 113, 114, 115, 116, 117, 63, 122, 196,
- /* 530 */ 196, 120, 121, 122, 26, 127, 106, 107, 108, 109,
- /* 540 */ 110, 111, 112, 113, 114, 115, 116, 117, 7, 8,
- /* 550 */ 9, 10, 219, 220, 148, 196, 207, 106, 107, 108,
- /* 560 */ 109, 110, 111, 112, 113, 114, 115, 116, 117, 235,
- /* 570 */ 120, 121, 122, 165, 110, 111, 196, 196, 20, 305,
- /* 580 */ 306, 196, 24, 119, 120, 121, 122, 63, 124, 256,
- /* 590 */ 218, 242, 243, 110, 111, 146, 132, 264, 226, 20,
- /* 600 */ 219, 220, 272, 24, 255, 47, 48, 49, 50, 51,
+ /* 510 */ 59, 60, 61, 23, 24, 106, 107, 108, 109, 110,
+ /* 520 */ 111, 112, 113, 114, 115, 116, 117, 63, 105, 286,
+ /* 530 */ 197, 120, 121, 122, 291, 63, 106, 107, 108, 109,
+ /* 540 */ 110, 111, 112, 113, 114, 115, 116, 117, 117, 197,
+ /* 550 */ 315, 316, 273, 197, 208, 320, 197, 106, 107, 108,
+ /* 560 */ 109, 110, 111, 112, 113, 114, 115, 116, 117, 143,
+ /* 570 */ 144, 197, 220, 221, 110, 111, 220, 221, 20, 220,
+ /* 580 */ 221, 20, 24, 119, 120, 121, 122, 235, 124, 243,
+ /* 590 */ 244, 235, 120, 121, 122, 105, 132, 239, 240, 20,
+ /* 600 */ 197, 268, 256, 24, 258, 47, 48, 49, 50, 51,
/* 610 */ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- /* 620 */ 20, 272, 158, 159, 24, 196, 47, 48, 49, 50,
+ /* 620 */ 20, 197, 158, 159, 24, 197, 47, 48, 49, 50,
/* 630 */ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- /* 640 */ 61, 158, 159, 23, 120, 121, 122, 47, 48, 49,
+ /* 640 */ 61, 267, 23, 197, 220, 221, 77, 47, 48, 49,
/* 650 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- /* 660 */ 60, 61, 154, 196, 106, 107, 108, 109, 110, 111,
- /* 670 */ 112, 113, 114, 115, 116, 117, 26, 63, 50, 63,
- /* 680 */ 156, 196, 196, 63, 196, 106, 107, 108, 109, 110,
- /* 690 */ 111, 112, 113, 114, 115, 116, 117, 312, 313, 196,
- /* 700 */ 214, 215, 317, 196, 219, 220, 106, 107, 108, 109,
- /* 710 */ 110, 111, 112, 113, 114, 115, 116, 117, 104, 234,
- /* 720 */ 313, 196, 219, 220, 317, 296, 196, 20, 112, 241,
- /* 730 */ 80, 24, 265, 196, 120, 121, 120, 121, 122, 125,
- /* 740 */ 120, 121, 122, 93, 219, 220, 96, 119, 20, 219,
- /* 750 */ 220, 196, 138, 85, 47, 48, 49, 50, 51, 52,
+ /* 660 */ 60, 61, 101, 85, 106, 107, 108, 109, 110, 111,
+ /* 670 */ 112, 113, 114, 115, 116, 117, 273, 197, 140, 197,
+ /* 680 */ 197, 257, 63, 145, 208, 106, 107, 108, 109, 110,
+ /* 690 */ 111, 112, 113, 114, 115, 116, 117, 215, 216, 197,
+ /* 700 */ 131, 132, 133, 220, 221, 197, 106, 107, 108, 109,
+ /* 710 */ 110, 111, 112, 113, 114, 115, 116, 117, 235, 243,
+ /* 720 */ 244, 143, 144, 307, 308, 245, 197, 20, 220, 221,
+ /* 730 */ 234, 24, 256, 123, 258, 289, 126, 127, 128, 120,
+ /* 740 */ 121, 122, 314, 235, 23, 24, 136, 26, 20, 220,
+ /* 750 */ 221, 214, 215, 216, 47, 48, 49, 50, 51, 52,
/* 760 */ 53, 54, 55, 56, 57, 58, 59, 60, 61, 20,
- /* 770 */ 196, 196, 158, 159, 288, 47, 48, 49, 50, 51,
+ /* 770 */ 197, 23, 290, 25, 197, 47, 48, 49, 50, 51,
/* 780 */ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- /* 790 */ 196, 23, 124, 219, 220, 63, 47, 48, 49, 50,
+ /* 790 */ 310, 316, 312, 220, 221, 320, 47, 48, 49, 50,
/* 800 */ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- /* 810 */ 61, 143, 144, 106, 107, 108, 109, 110, 111, 112,
- /* 820 */ 113, 114, 115, 116, 117, 63, 196, 115, 116, 117,
- /* 830 */ 256, 63, 196, 17, 106, 107, 108, 109, 110, 111,
- /* 840 */ 112, 113, 114, 115, 116, 117, 63, 196, 311, 219,
- /* 850 */ 220, 296, 120, 121, 122, 106, 107, 108, 109, 110,
- /* 860 */ 111, 112, 113, 114, 115, 116, 117, 213, 214, 215,
- /* 870 */ 219, 220, 196, 23, 24, 313, 26, 104, 196, 317,
- /* 880 */ 148, 196, 120, 121, 122, 234, 256, 20, 120, 121,
- /* 890 */ 122, 163, 25, 23, 121, 26, 196, 81, 125, 83,
- /* 900 */ 196, 219, 220, 120, 121, 122, 196, 271, 20, 209,
- /* 910 */ 148, 138, 163, 196, 47, 48, 49, 50, 51, 52,
+ /* 810 */ 61, 63, 197, 106, 107, 108, 109, 110, 111, 112,
+ /* 820 */ 113, 114, 115, 116, 117, 210, 105, 26, 22, 197,
+ /* 830 */ 257, 197, 208, 197, 106, 107, 108, 109, 110, 111,
+ /* 840 */ 112, 113, 114, 115, 116, 117, 63, 197, 208, 63,
+ /* 850 */ 197, 45, 220, 221, 197, 106, 107, 108, 109, 110,
+ /* 860 */ 111, 112, 113, 114, 115, 116, 117, 243, 244, 121,
+ /* 870 */ 220, 221, 197, 220, 221, 197, 242, 220, 221, 197,
+ /* 880 */ 256, 80, 258, 243, 244, 235, 197, 20, 235, 257,
+ /* 890 */ 84, 163, 25, 197, 93, 112, 256, 96, 258, 264,
+ /* 900 */ 265, 205, 197, 120, 121, 122, 210, 121, 20, 220,
+ /* 910 */ 221, 236, 163, 197, 47, 48, 49, 50, 51, 52,
/* 920 */ 53, 54, 55, 56, 57, 58, 59, 60, 61, 20,
- /* 930 */ 313, 158, 159, 63, 317, 47, 48, 49, 50, 51,
+ /* 930 */ 197, 215, 216, 127, 298, 47, 48, 49, 50, 51,
/* 940 */ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- /* 950 */ 23, 24, 196, 26, 216, 105, 47, 48, 49, 50,
+ /* 950 */ 115, 116, 117, 20, 63, 197, 47, 48, 49, 50,
/* 960 */ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- /* 970 */ 61, 196, 201, 106, 107, 108, 109, 110, 111, 112,
- /* 980 */ 113, 114, 115, 116, 117, 196, 262, 263, 312, 313,
- /* 990 */ 196, 121, 207, 317, 106, 107, 108, 109, 110, 111,
- /* 1000 */ 112, 113, 114, 115, 116, 117, 196, 276, 219, 220,
- /* 1010 */ 20, 196, 143, 144, 17, 106, 107, 108, 109, 110,
- /* 1020 */ 111, 112, 113, 114, 115, 116, 117, 242, 243, 219,
- /* 1030 */ 220, 70, 105, 295, 219, 220, 20, 196, 196, 196,
- /* 1040 */ 255, 266, 45, 26, 234, 256, 315, 316, 77, 234,
- /* 1050 */ 89, 209, 296, 196, 23, 284, 85, 20, 196, 98,
- /* 1060 */ 289, 196, 219, 220, 48, 49, 50, 51, 52, 53,
- /* 1070 */ 54, 55, 56, 57, 58, 59, 60, 61, 81, 313,
- /* 1080 */ 83, 219, 220, 317, 219, 220, 49, 50, 51, 52,
- /* 1090 */ 53, 54, 55, 56, 57, 58, 59, 60, 61, 234,
- /* 1100 */ 216, 244, 131, 190, 191, 192, 193, 266, 196, 119,
- /* 1110 */ 120, 198, 151, 200, 143, 144, 20, 21, 256, 23,
- /* 1120 */ 207, 196, 106, 107, 108, 109, 110, 111, 112, 113,
- /* 1130 */ 114, 115, 116, 117, 38, 77, 20, 196, 196, 149,
- /* 1140 */ 196, 110, 111, 106, 107, 108, 109, 110, 111, 112,
- /* 1150 */ 113, 114, 115, 116, 117, 242, 243, 207, 119, 63,
- /* 1160 */ 219, 220, 165, 219, 220, 308, 50, 150, 255, 20,
- /* 1170 */ 21, 75, 23, 196, 290, 234, 23, 24, 234, 295,
- /* 1180 */ 196, 85, 269, 196, 207, 196, 244, 38, 149, 131,
- /* 1190 */ 132, 133, 242, 243, 196, 37, 219, 220, 243, 196,
- /* 1200 */ 104, 52, 196, 219, 220, 255, 110, 111, 219, 220,
- /* 1210 */ 255, 13, 63, 207, 118, 302, 120, 121, 122, 242,
- /* 1220 */ 243, 125, 196, 196, 75, 219, 220, 29, 70, 131,
- /* 1230 */ 132, 133, 255, 256, 138, 119, 78, 207, 89, 143,
- /* 1240 */ 144, 264, 44, 94, 196, 219, 220, 244, 242, 243,
- /* 1250 */ 308, 135, 196, 104, 158, 159, 160, 161, 105, 110,
- /* 1260 */ 111, 255, 256, 196, 266, 67, 196, 118, 241, 120,
- /* 1270 */ 121, 122, 242, 243, 125, 77, 20, 21, 207, 23,
- /* 1280 */ 207, 24, 256, 26, 196, 255, 196, 138, 0, 1,
- /* 1290 */ 2, 196, 134, 5, 38, 196, 276, 241, 207, 11,
- /* 1300 */ 12, 13, 14, 15, 276, 235, 18, 158, 159, 160,
- /* 1310 */ 161, 308, 23, 242, 243, 242, 243, 196, 20, 63,
- /* 1320 */ 32, 13, 34, 196, 196, 112, 255, 196, 255, 241,
- /* 1330 */ 42, 75, 196, 242, 243, 315, 316, 29, 196, 244,
- /* 1340 */ 219, 220, 196, 315, 316, 89, 255, 219, 220, 247,
- /* 1350 */ 94, 119, 44, 140, 65, 219, 220, 263, 145, 257,
- /* 1360 */ 104, 267, 74, 23, 24, 196, 110, 111, 196, 196,
- /* 1370 */ 82, 26, 241, 85, 118, 67, 120, 121, 122, 122,
- /* 1380 */ 24, 125, 26, 20, 21, 196, 23, 155, 219, 220,
- /* 1390 */ 102, 219, 220, 266, 138, 263, 1, 2, 196, 267,
- /* 1400 */ 5, 38, 103, 308, 261, 148, 11, 12, 13, 14,
- /* 1410 */ 15, 196, 266, 18, 158, 159, 160, 161, 120, 211,
- /* 1420 */ 212, 219, 220, 196, 196, 137, 63, 32, 63, 34,
- /* 1430 */ 196, 143, 144, 5, 219, 220, 137, 42, 75, 11,
- /* 1440 */ 12, 13, 14, 15, 196, 105, 18, 219, 220, 20,
- /* 1450 */ 20, 21, 89, 23, 166, 211, 212, 94, 143, 144,
- /* 1460 */ 32, 26, 34, 242, 243, 166, 196, 104, 38, 74,
- /* 1470 */ 42, 196, 247, 110, 111, 196, 255, 82, 303, 304,
- /* 1480 */ 85, 118, 257, 120, 121, 122, 121, 25, 125, 219,
- /* 1490 */ 220, 196, 147, 63, 219, 220, 196, 102, 219, 220,
- /* 1500 */ 266, 138, 74, 242, 243, 75, 131, 132, 133, 33,
- /* 1510 */ 82, 16, 196, 85, 219, 220, 255, 41, 247, 219,
- /* 1520 */ 220, 158, 159, 160, 161, 25, 20, 21, 257, 23,
- /* 1530 */ 102, 162, 137, 164, 104, 219, 220, 247, 143, 144,
- /* 1540 */ 110, 111, 112, 196, 38, 259, 260, 257, 118, 120,
- /* 1550 */ 120, 121, 122, 196, 133, 125, 154, 155, 24, 64,
- /* 1560 */ 26, 166, 196, 63, 63, 137, 219, 220, 138, 63,
- /* 1570 */ 23, 143, 144, 196, 140, 196, 219, 220, 157, 145,
- /* 1580 */ 196, 75, 147, 196, 24, 219, 220, 196, 158, 159,
- /* 1590 */ 160, 161, 124, 125, 166, 196, 219, 220, 219, 220,
- /* 1600 */ 7, 8, 20, 21, 57, 23, 219, 220, 146, 20,
- /* 1610 */ 104, 196, 196, 196, 25, 196, 110, 111, 219, 220,
- /* 1620 */ 38, 121, 121, 191, 118, 193, 120, 121, 122, 196,
- /* 1630 */ 198, 125, 200, 121, 219, 220, 219, 220, 196, 207,
- /* 1640 */ 23, 196, 25, 196, 138, 63, 24, 196, 26, 196,
- /* 1650 */ 138, 145, 219, 220, 196, 20, 133, 75, 24, 196,
- /* 1660 */ 26, 219, 220, 196, 158, 159, 160, 161, 158, 159,
- /* 1670 */ 219, 220, 219, 220, 242, 243, 158, 159, 20, 21,
- /* 1680 */ 157, 23, 219, 220, 125, 196, 104, 255, 99, 24,
- /* 1690 */ 196, 26, 110, 111, 135, 24, 38, 26, 229, 196,
- /* 1700 */ 118, 269, 120, 121, 122, 196, 117, 125, 219, 220,
- /* 1710 */ 150, 229, 123, 124, 125, 126, 127, 128, 129, 63,
- /* 1720 */ 138, 63, 219, 220, 135, 229, 196, 145, 24, 196,
- /* 1730 */ 26, 196, 196, 75, 302, 196, 101, 196, 87, 88,
- /* 1740 */ 158, 159, 160, 161, 196, 196, 24, 196, 26, 219,
- /* 1750 */ 220, 196, 219, 220, 219, 220, 258, 196, 219, 220,
- /* 1760 */ 219, 220, 104, 196, 24, 196, 26, 196, 110, 111,
- /* 1770 */ 219, 220, 63, 24, 196, 26, 118, 121, 120, 121,
- /* 1780 */ 122, 322, 196, 125, 196, 239, 219, 220, 219, 220,
- /* 1790 */ 24, 196, 26, 24, 196, 26, 138, 219, 220, 196,
- /* 1800 */ 24, 24, 26, 26, 196, 219, 220, 24, 196, 26,
- /* 1810 */ 196, 196, 196, 194, 219, 220, 158, 159, 160, 161,
- /* 1820 */ 196, 196, 219, 220, 292, 245, 258, 246, 291, 301,
- /* 1830 */ 121, 258, 258, 258, 270, 217, 274, 297, 248, 274,
- /* 1840 */ 270, 249, 297, 249, 248, 232, 274, 262, 228, 223,
- /* 1850 */ 274, 222, 222, 222, 252, 248, 252, 246, 199, 262,
- /* 1860 */ 283, 262, 262, 64, 301, 146, 203, 301, 40, 203,
- /* 1870 */ 203, 156, 155, 23, 287, 237, 275, 298, 273, 47,
- /* 1880 */ 19, 298, 240, 240, 240, 240, 240, 203, 19, 202,
- /* 1890 */ 154, 237, 237, 149, 273, 285, 249, 249, 275, 249,
- /* 1900 */ 203, 249, 275, 202, 202, 162, 66, 23, 203, 202,
- /* 1910 */ 224, 203, 202, 224, 203, 202, 119, 221, 230, 221,
- /* 1920 */ 221, 68, 294, 23, 130, 293, 169, 227, 25, 223,
- /* 1930 */ 227, 117, 203, 95, 86, 221, 224, 221, 268, 286,
- /* 1940 */ 268, 221, 221, 286, 153, 309, 253, 224, 230, 316,
- /* 1950 */ 150, 23, 162, 280, 203, 152, 282, 151, 321, 26,
- /* 1960 */ 321, 205, 14, 6, 197, 197, 195, 195, 195, 307,
- /* 1970 */ 210, 307, 304, 210, 216, 216, 252, 251, 253, 225,
- /* 1980 */ 250, 249, 217, 4, 3, 210, 216, 225, 23, 210,
- /* 1990 */ 216, 167, 16, 64, 16, 217, 216, 17, 24, 24,
- /* 2000 */ 144, 156, 134, 26, 147, 21, 17, 25, 149, 1,
- /* 2010 */ 147, 134, 134, 57, 65, 57, 156, 57, 57, 134,
- /* 2020 */ 146, 120, 39, 36, 1, 5, 26, 23, 119, 165,
- /* 2030 */ 25, 46, 79, 43, 72, 72, 146, 119, 25, 21,
- /* 2040 */ 135, 20, 129, 71, 71, 23, 100, 23, 23, 63,
- /* 2050 */ 24, 23, 25, 23, 39, 24, 154, 23, 23, 30,
- /* 2060 */ 24, 24, 71, 24, 26, 101, 146, 24, 36, 24,
- /* 2070 */ 120, 23, 148, 26, 79, 79, 36, 36, 36, 24,
- /* 2080 */ 36, 48, 36, 90, 92, 97, 36, 23, 25, 36,
- /* 2090 */ 147, 26, 26, 24, 147, 24, 24, 24, 24, 12,
- /* 2100 */ 24, 26, 23, 23, 23, 146, 24, 24, 23, 23,
- /* 2110 */ 26, 140, 146, 146, 26, 24, 16, 1, 1, 323,
- /* 2120 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2130 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2140 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2150 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2160 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2170 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2180 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2190 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2200 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2210 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2220 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2230 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2240 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2250 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2260 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2270 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2280 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2290 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- /* 2300 */ 323, 323, 323, 323, 323, 323, 323,
+ /* 970 */ 61, 165, 283, 106, 107, 108, 109, 110, 111, 112,
+ /* 980 */ 113, 114, 115, 116, 117, 197, 63, 197, 310, 197,
+ /* 990 */ 312, 253, 197, 255, 106, 107, 108, 109, 110, 111,
+ /* 1000 */ 112, 113, 114, 115, 116, 117, 290, 197, 220, 221,
+ /* 1010 */ 197, 120, 121, 122, 25, 106, 107, 108, 109, 110,
+ /* 1020 */ 111, 112, 113, 114, 115, 116, 117, 104, 197, 104,
+ /* 1030 */ 220, 221, 227, 197, 229, 245, 20, 17, 80, 148,
+ /* 1040 */ 245, 197, 237, 120, 121, 235, 121, 197, 125, 91,
+ /* 1050 */ 125, 93, 63, 120, 96, 197, 197, 20, 23, 24,
+ /* 1060 */ 268, 138, 12, 138, 48, 49, 50, 51, 52, 53,
+ /* 1070 */ 54, 55, 56, 57, 58, 59, 60, 61, 220, 221,
+ /* 1080 */ 63, 158, 159, 158, 159, 274, 49, 50, 51, 52,
+ /* 1090 */ 53, 54, 55, 56, 57, 58, 59, 60, 61, 268,
+ /* 1100 */ 310, 81, 312, 83, 13, 310, 119, 312, 150, 186,
+ /* 1110 */ 121, 186, 268, 26, 26, 257, 20, 21, 197, 23,
+ /* 1120 */ 29, 103, 106, 107, 108, 109, 110, 111, 112, 113,
+ /* 1130 */ 114, 115, 116, 117, 38, 44, 149, 120, 121, 122,
+ /* 1140 */ 105, 220, 221, 106, 107, 108, 109, 110, 111, 112,
+ /* 1150 */ 113, 114, 115, 116, 117, 137, 235, 217, 67, 63,
+ /* 1160 */ 70, 243, 244, 197, 17, 148, 197, 197, 77, 20,
+ /* 1170 */ 21, 75, 23, 197, 256, 24, 258, 26, 197, 89,
+ /* 1180 */ 210, 85, 132, 133, 166, 20, 230, 38, 98, 220,
+ /* 1190 */ 221, 197, 45, 131, 132, 133, 220, 221, 212, 213,
+ /* 1200 */ 104, 52, 232, 37, 234, 278, 110, 111, 278, 122,
+ /* 1210 */ 243, 244, 63, 192, 118, 194, 120, 121, 122, 197,
+ /* 1220 */ 199, 125, 201, 256, 75, 258, 257, 197, 81, 208,
+ /* 1230 */ 83, 25, 292, 257, 138, 148, 70, 297, 89, 143,
+ /* 1240 */ 144, 151, 154, 94, 78, 318, 319, 263, 318, 319,
+ /* 1250 */ 220, 221, 13, 104, 158, 159, 160, 161, 316, 110,
+ /* 1260 */ 111, 278, 320, 16, 243, 244, 197, 118, 29, 120,
+ /* 1270 */ 121, 122, 197, 122, 125, 20, 21, 256, 23, 258,
+ /* 1280 */ 121, 20, 186, 44, 119, 120, 25, 138, 191, 192,
+ /* 1290 */ 193, 194, 271, 38, 313, 314, 199, 138, 201, 148,
+ /* 1300 */ 134, 318, 319, 197, 63, 208, 67, 158, 159, 160,
+ /* 1310 */ 161, 64, 165, 197, 149, 197, 31, 112, 63, 316,
+ /* 1320 */ 35, 80, 197, 320, 197, 304, 220, 221, 20, 21,
+ /* 1330 */ 75, 23, 91, 197, 93, 186, 267, 96, 220, 221,
+ /* 1340 */ 243, 244, 23, 268, 89, 140, 38, 220, 221, 94,
+ /* 1350 */ 145, 80, 146, 256, 69, 258, 220, 221, 242, 104,
+ /* 1360 */ 99, 120, 121, 122, 93, 110, 111, 96, 271, 125,
+ /* 1370 */ 265, 63, 197, 118, 269, 120, 121, 122, 117, 135,
+ /* 1380 */ 125, 20, 63, 75, 123, 124, 125, 126, 127, 128,
+ /* 1390 */ 129, 150, 267, 138, 197, 316, 135, 89, 197, 320,
+ /* 1400 */ 197, 304, 94, 131, 132, 133, 265, 197, 197, 26,
+ /* 1410 */ 269, 50, 104, 158, 159, 160, 161, 242, 110, 111,
+ /* 1420 */ 150, 220, 221, 220, 221, 197, 118, 197, 120, 121,
+ /* 1430 */ 122, 220, 221, 125, 212, 213, 305, 306, 168, 242,
+ /* 1440 */ 121, 186, 0, 1, 2, 20, 138, 5, 220, 221,
+ /* 1450 */ 220, 221, 242, 11, 12, 13, 14, 15, 260, 316,
+ /* 1460 */ 18, 248, 197, 320, 248, 197, 158, 159, 160, 161,
+ /* 1470 */ 197, 248, 259, 208, 32, 259, 34, 154, 155, 197,
+ /* 1480 */ 119, 197, 259, 197, 42, 220, 221, 197, 220, 221,
+ /* 1490 */ 197, 33, 261, 262, 186, 50, 135, 20, 21, 41,
+ /* 1500 */ 23, 26, 220, 221, 220, 221, 220, 221, 243, 244,
+ /* 1510 */ 220, 221, 197, 220, 221, 38, 74, 248, 24, 197,
+ /* 1520 */ 26, 256, 257, 258, 82, 197, 133, 85, 259, 162,
+ /* 1530 */ 197, 164, 197, 150, 133, 220, 221, 197, 26, 197,
+ /* 1540 */ 63, 197, 220, 221, 102, 120, 63, 197, 220, 221,
+ /* 1550 */ 157, 197, 75, 220, 221, 220, 221, 119, 157, 197,
+ /* 1560 */ 220, 221, 220, 221, 119, 189, 190, 191, 192, 193,
+ /* 1570 */ 194, 197, 23, 23, 25, 199, 197, 201, 24, 137,
+ /* 1580 */ 26, 104, 220, 221, 208, 143, 144, 110, 111, 112,
+ /* 1590 */ 24, 23, 26, 155, 24, 118, 26, 120, 121, 122,
+ /* 1600 */ 20, 21, 125, 23, 121, 130, 197, 57, 166, 24,
+ /* 1610 */ 24, 26, 26, 124, 125, 138, 197, 197, 38, 243,
+ /* 1620 */ 244, 197, 24, 197, 26, 197, 24, 197, 26, 220,
+ /* 1630 */ 221, 23, 256, 65, 258, 158, 159, 160, 161, 220,
+ /* 1640 */ 221, 197, 230, 63, 220, 221, 197, 271, 220, 221,
+ /* 1650 */ 220, 221, 197, 197, 197, 75, 7, 8, 197, 147,
+ /* 1660 */ 24, 197, 26, 186, 220, 221, 24, 197, 26, 220,
+ /* 1670 */ 221, 197, 24, 63, 26, 220, 221, 220, 221, 197,
+ /* 1680 */ 304, 220, 221, 197, 104, 197, 240, 197, 87, 88,
+ /* 1690 */ 110, 111, 158, 159, 220, 221, 197, 24, 118, 26,
+ /* 1700 */ 120, 121, 122, 197, 197, 125, 220, 221, 220, 221,
+ /* 1710 */ 220, 221, 20, 21, 24, 23, 26, 197, 138, 220,
+ /* 1720 */ 221, 197, 24, 197, 26, 145, 220, 221, 197, 63,
+ /* 1730 */ 38, 121, 24, 197, 26, 197, 197, 197, 158, 159,
+ /* 1740 */ 160, 161, 158, 159, 220, 221, 220, 221, 197, 197,
+ /* 1750 */ 197, 220, 221, 197, 146, 63, 220, 221, 220, 221,
+ /* 1760 */ 220, 221, 24, 230, 26, 325, 186, 75, 197, 197,
+ /* 1770 */ 197, 197, 197, 220, 221, 197, 197, 293, 197, 197,
+ /* 1780 */ 197, 294, 260, 246, 197, 197, 197, 121, 197, 197,
+ /* 1790 */ 197, 197, 195, 247, 218, 260, 104, 276, 303, 272,
+ /* 1800 */ 272, 260, 110, 111, 260, 250, 249, 299, 276, 250,
+ /* 1810 */ 118, 249, 120, 121, 122, 1, 2, 125, 276, 5,
+ /* 1820 */ 224, 276, 299, 233, 229, 11, 12, 13, 14, 15,
+ /* 1830 */ 138, 264, 18, 264, 5, 223, 223, 145, 223, 200,
+ /* 1840 */ 11, 12, 13, 14, 15, 285, 32, 18, 34, 64,
+ /* 1850 */ 158, 159, 160, 161, 247, 249, 42, 253, 253, 146,
+ /* 1860 */ 204, 32, 204, 34, 264, 40, 303, 264, 303, 20,
+ /* 1870 */ 21, 42, 23, 204, 156, 155, 277, 300, 186, 23,
+ /* 1880 */ 47, 238, 19, 204, 19, 241, 241, 38, 74, 275,
+ /* 1890 */ 203, 241, 241, 241, 154, 277, 82, 250, 277, 85,
+ /* 1900 */ 289, 275, 238, 74, 250, 250, 238, 250, 149, 300,
+ /* 1910 */ 287, 82, 63, 204, 85, 203, 102, 203, 162, 66,
+ /* 1920 */ 296, 204, 295, 23, 75, 203, 225, 204, 203, 225,
+ /* 1930 */ 204, 102, 203, 222, 119, 68, 231, 222, 222, 23,
+ /* 1940 */ 130, 231, 169, 25, 319, 311, 222, 228, 117, 228,
+ /* 1950 */ 222, 137, 225, 104, 224, 222, 222, 143, 144, 110,
+ /* 1960 */ 111, 225, 288, 288, 204, 95, 137, 118, 86, 120,
+ /* 1970 */ 121, 122, 143, 144, 125, 153, 270, 324, 150, 23,
+ /* 1980 */ 166, 282, 204, 324, 284, 162, 254, 138, 253, 152,
+ /* 1990 */ 151, 254, 250, 252, 251, 166, 26, 206, 14, 198,
+ /* 2000 */ 198, 270, 6, 196, 196, 196, 309, 158, 159, 160,
+ /* 2010 */ 161, 309, 217, 306, 211, 211, 217, 217, 226, 226,
+ /* 2020 */ 4, 3, 217, 211, 218, 23, 167, 211, 16, 218,
+ /* 2030 */ 217, 64, 17, 16, 24, 186, 144, 24, 134, 156,
+ /* 2040 */ 26, 147, 21, 17, 25, 149, 1, 134, 147, 134,
+ /* 2050 */ 65, 156, 57, 134, 57, 57, 57, 120, 36, 39,
+ /* 2060 */ 146, 1, 5, 26, 23, 119, 72, 165, 25, 46,
+ /* 2070 */ 79, 43, 72, 146, 119, 25, 21, 135, 20, 129,
+ /* 2080 */ 71, 25, 23, 100, 23, 23, 39, 24, 23, 23,
+ /* 2090 */ 63, 24, 154, 23, 30, 71, 71, 24, 24, 146,
+ /* 2100 */ 24, 26, 23, 23, 36, 101, 24, 24, 120, 148,
+ /* 2110 */ 26, 79, 79, 36, 36, 24, 23, 36, 26, 90,
+ /* 2120 */ 48, 36, 36, 92, 36, 25, 36, 97, 26, 147,
+ /* 2130 */ 24, 24, 24, 147, 24, 23, 12, 26, 24, 26,
+ /* 2140 */ 24, 23, 23, 23, 16, 24, 24, 140, 23, 23,
+ /* 2150 */ 1, 146, 146, 26, 146, 26, 24, 1, 326, 326,
+ /* 2160 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2170 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2180 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2190 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2200 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2210 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2220 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2230 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2240 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2250 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2260 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2270 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2280 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2290 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2300 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2310 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2320 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2330 */ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+ /* 2340 */ 326, 326, 326, 326, 326, 326, 326,
};
-#define YY_SHIFT_COUNT (596)
+#define YY_SHIFT_COUNT (600)
#define YY_SHIFT_MIN (0)
-#define YY_SHIFT_MAX (2117)
+#define YY_SHIFT_MAX (2156)
static const unsigned short int yy_shift_ofst[] = {
- /* 0 */ 1395, 1288, 1428, 1096, 1096, 59, 1149, 1256, 1363, 1658,
- /* 10 */ 1658, 1658, 971, 0, 0, 187, 888, 1658, 1658, 1658,
- /* 20 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658,
- /* 30 */ 1658, 464, 464, 301, 301, 262, 668, 59, 59, 59,
- /* 40 */ 59, 59, 42, 113, 229, 300, 409, 430, 451, 558,
- /* 50 */ 579, 600, 707, 728, 749, 867, 888, 888, 888, 888,
- /* 60 */ 888, 888, 888, 888, 888, 888, 888, 888, 888, 888,
- /* 70 */ 888, 888, 888, 888, 909, 888, 1016, 1037, 1037, 1430,
- /* 80 */ 1506, 1582, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658,
- /* 90 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658,
- /* 100 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658,
- /* 110 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658,
- /* 120 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658,
- /* 130 */ 1658, 153, 263, 263, 263, 263, 263, 263, 263, 84,
- /* 140 */ 195, 67, 304, 323, 408, 373, 783, 783, 1116, 783,
- /* 150 */ 783, 483, 483, 783, 869, 869, 869, 712, 869, 142,
- /* 160 */ 149, 149, 149, 30, 30, 2119, 2119, 1589, 1589, 1589,
- /* 170 */ 1589, 304, 524, 193, 193, 193, 193, 1198, 1198, 237,
- /* 180 */ 850, 927, 783, 783, 783, 783, 783, 783, 783, 783,
- /* 190 */ 783, 783, 783, 783, 783, 783, 783, 783, 783, 783,
- /* 200 */ 783, 783, 783, 783, 783, 990, 650, 650, 783, 194,
- /* 210 */ 50, 50, 1298, 1298, 1365, 1365, 346, 1315, 2119, 2119,
- /* 220 */ 2119, 2119, 2119, 2119, 2119, 614, 773, 773, 411, 82,
- /* 230 */ 450, 616, 620, 732, 762, 768, 783, 783, 783, 783,
- /* 240 */ 783, 783, 783, 783, 783, 783, 1058, 783, 783, 783,
- /* 250 */ 783, 783, 783, 783, 783, 783, 783, 783, 783, 783,
- /* 260 */ 783, 783, 1158, 1158, 1158, 783, 783, 783, 1257, 783,
- /* 270 */ 783, 783, 208, 961, 783, 783, 1308, 783, 783, 783,
- /* 280 */ 783, 783, 783, 783, 783, 783, 541, 1098, 331, 46,
- /* 290 */ 1500, 1500, 1500, 1500, 406, 46, 46, 1213, 1031, 1495,
- /* 300 */ 1232, 1402, 1345, 1402, 1429, 508, 1232, 1232, 508, 1232,
- /* 310 */ 1345, 1429, 102, 1356, 628, 1476, 1476, 1476, 1039, 1039,
- /* 320 */ 1039, 1039, 1017, 1017, 1369, 1435, 1434, 1617, 1799, 1799,
- /* 330 */ 1719, 1719, 1828, 1828, 1719, 1715, 1717, 1850, 1832, 1861,
- /* 340 */ 1861, 1861, 1861, 1861, 1719, 1869, 1736, 1717, 1717, 1736,
- /* 350 */ 1850, 1832, 1736, 1832, 1736, 1744, 1719, 1869, 1869, 1743,
- /* 360 */ 1840, 1719, 1869, 1884, 1719, 1869, 1719, 1869, 1884, 1797,
- /* 370 */ 1797, 1797, 1853, 1900, 1900, 1884, 1797, 1794, 1797, 1853,
- /* 380 */ 1797, 1797, 1757, 1903, 1814, 1814, 1884, 1719, 1838, 1838,
- /* 390 */ 1848, 1848, 1791, 1800, 1928, 1719, 1790, 1791, 1803, 1806,
- /* 400 */ 1736, 1933, 1948, 1948, 1957, 1957, 1957, 2119, 2119, 2119,
- /* 410 */ 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119,
- /* 420 */ 2119, 2119, 2119, 997, 351, 1153, 1340, 1299, 816, 1375,
- /* 430 */ 870, 1534, 1547, 1462, 1421, 1523, 1622, 1289, 1665, 1671,
- /* 440 */ 1704, 1722, 1512, 1634, 1749, 1501, 1468, 1593, 1559, 1766,
- /* 450 */ 1560, 1635, 1656, 1769, 1776, 1651, 1740, 1510, 1518, 1777,
- /* 460 */ 1783, 1709, 449, 1979, 1981, 1965, 1824, 1976, 1929, 1978,
- /* 470 */ 1980, 1974, 1975, 1856, 1845, 1868, 1977, 1977, 1982, 1857,
- /* 480 */ 1984, 1859, 1989, 2008, 1863, 1877, 1977, 1878, 1949, 1983,
- /* 490 */ 1977, 1860, 1956, 1958, 1960, 1961, 1885, 1901, 1987, 1874,
- /* 500 */ 2023, 2020, 2000, 2004, 1909, 1864, 2005, 1985, 1962, 2000,
- /* 510 */ 1963, 1953, 1990, 1890, 1918, 2013, 2018, 2021, 1905, 1913,
- /* 520 */ 2022, 1972, 2024, 2025, 2026, 2028, 1973, 1986, 2027, 1946,
- /* 530 */ 2029, 2030, 1991, 2015, 2031, 2032, 1902, 2034, 2036, 2037,
- /* 540 */ 2038, 2039, 2035, 1964, 1920, 2043, 2045, 1950, 2040, 2048,
- /* 550 */ 1924, 2047, 2041, 2042, 2044, 2046, 1992, 1995, 1993, 2033,
- /* 560 */ 1996, 1988, 2050, 2055, 2064, 2063, 2065, 2066, 2053, 1943,
- /* 570 */ 1947, 2069, 2047, 2071, 2072, 2073, 2074, 2075, 2076, 2079,
- /* 580 */ 2087, 2080, 2081, 2082, 2083, 2085, 2086, 2084, 1971, 1959,
- /* 590 */ 1966, 1967, 2088, 2091, 2100, 2116, 2117,
+ /* 0 */ 1814, 1442, 1829, 1096, 1096, 578, 53, 1149, 1255, 1308,
+ /* 10 */ 1849, 1849, 1849, 108, 578, 578, 578, 578, 578, 0,
+ /* 20 */ 0, 187, 888, 1849, 1849, 1849, 1849, 1849, 1849, 1849,
+ /* 30 */ 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 464, 464,
+ /* 40 */ 1241, 1241, 55, 305, 372, 211, 211, 426, 426, 426,
+ /* 50 */ 426, 42, 113, 229, 300, 409, 430, 451, 558, 579,
+ /* 60 */ 600, 707, 728, 749, 867, 888, 888, 888, 888, 888,
+ /* 70 */ 888, 888, 888, 888, 888, 888, 888, 888, 888, 888,
+ /* 80 */ 888, 888, 888, 909, 888, 1016, 1037, 1037, 1477, 1580,
+ /* 90 */ 1692, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849,
+ /* 100 */ 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849,
+ /* 110 */ 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849,
+ /* 120 */ 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849,
+ /* 130 */ 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849,
+ /* 140 */ 153, 263, 263, 263, 263, 263, 263, 263, 277, 89,
+ /* 150 */ 193, 299, 806, 211, 1361, 211, 211, 285, 285, 211,
+ /* 160 */ 835, 140, 232, 232, 232, 353, 431, 431, 2158, 2158,
+ /* 170 */ 1261, 1261, 1261, 1261, 299, 135, 208, 208, 208, 208,
+ /* 180 */ 1091, 1091, 958, 423, 721, 211, 211, 211, 211, 211,
+ /* 190 */ 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
+ /* 200 */ 211, 211, 211, 211, 211, 211, 211, 1165, 801, 801,
+ /* 210 */ 211, 1050, 1271, 1271, 933, 933, 786, 786, 1270, 2158,
+ /* 220 */ 2158, 2158, 2158, 2158, 2158, 2158, 923, 925, 925, 302,
+ /* 230 */ 610, 411, 783, 472, 891, 1017, 619, 211, 211, 211,
+ /* 240 */ 211, 211, 211, 211, 211, 211, 211, 569, 211, 211,
+ /* 250 */ 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
+ /* 260 */ 211, 211, 211, 1166, 1166, 1166, 211, 211, 211, 1151,
+ /* 270 */ 211, 211, 211, 748, 1090, 211, 211, 1239, 211, 211,
+ /* 280 */ 211, 211, 211, 211, 211, 211, 211, 180, 1062, 1285,
+ /* 290 */ 225, 989, 989, 989, 989, 1087, 225, 225, 1205, 294,
+ /* 300 */ 1247, 1438, 1323, 293, 1323, 1425, 1088, 1438, 1438, 1088,
+ /* 310 */ 1438, 293, 1425, 1475, 1494, 1445, 1458, 1458, 1458, 987,
+ /* 320 */ 987, 987, 987, 1383, 1383, 1367, 1512, 538, 1549, 1785,
+ /* 330 */ 1785, 1713, 1713, 1825, 1825, 1713, 1718, 1720, 1856, 1833,
+ /* 340 */ 1863, 1863, 1863, 1863, 1863, 1713, 1865, 1740, 1720, 1720,
+ /* 350 */ 1740, 1856, 1833, 1740, 1833, 1740, 1759, 1713, 1865, 1865,
+ /* 360 */ 1756, 1853, 1713, 1865, 1900, 1713, 1865, 1713, 1865, 1900,
+ /* 370 */ 1815, 1815, 1815, 1867, 1916, 1916, 1900, 1815, 1810, 1815,
+ /* 380 */ 1867, 1815, 1815, 1773, 1918, 1831, 1831, 1900, 1713, 1870,
+ /* 390 */ 1870, 1882, 1882, 1822, 1828, 1956, 1713, 1823, 1822, 1837,
+ /* 400 */ 1839, 1740, 1970, 1984, 1984, 1996, 1996, 1996, 2158, 2158,
+ /* 410 */ 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158,
+ /* 420 */ 2158, 2158, 2158, 2158, 1147, 347, 490, 1035, 1018, 1020,
+ /* 430 */ 1272, 1319, 1554, 1550, 1206, 1393, 1401, 1566, 1568, 1570,
+ /* 440 */ 1585, 1586, 1598, 1159, 1602, 1636, 1483, 1489, 1649, 1244,
+ /* 450 */ 1642, 292, 561, 1610, 1648, 1673, 1601, 1690, 1698, 1534,
+ /* 460 */ 1584, 1708, 1738, 1666, 1608, 2016, 2018, 2002, 1859, 2012,
+ /* 470 */ 1967, 2017, 2015, 2010, 2013, 1892, 1883, 1904, 2014, 2014,
+ /* 480 */ 2019, 1894, 2021, 1896, 2026, 2045, 1901, 1913, 2014, 1915,
+ /* 490 */ 1985, 2020, 2014, 1895, 1995, 1997, 1998, 1999, 1919, 1937,
+ /* 500 */ 2022, 1914, 2060, 2057, 2037, 2041, 1946, 1902, 2043, 2023,
+ /* 510 */ 1994, 2037, 2000, 1991, 2028, 1927, 1955, 2050, 2055, 2058,
+ /* 520 */ 1942, 1950, 2059, 2009, 2061, 2062, 2063, 2065, 2024, 2027,
+ /* 530 */ 2056, 1983, 2064, 2066, 2025, 2047, 2067, 2068, 1938, 2070,
+ /* 540 */ 2073, 2074, 2075, 2076, 2079, 2004, 1953, 2082, 2083, 1988,
+ /* 550 */ 2077, 2080, 1961, 2084, 2078, 2081, 2085, 2086, 2031, 2032,
+ /* 560 */ 2029, 2072, 2033, 2030, 2088, 2091, 2093, 2100, 2092, 2102,
+ /* 570 */ 2090, 1982, 1986, 2106, 2084, 2107, 2108, 2110, 2112, 2111,
+ /* 580 */ 2114, 2113, 2116, 2118, 2124, 2119, 2120, 2121, 2122, 2125,
+ /* 590 */ 2126, 2127, 2007, 2005, 2006, 2008, 2129, 2132, 2128, 2149,
+ /* 600 */ 2156,
};
-#define YY_REDUCE_COUNT (422)
-#define YY_REDUCE_MIN (-277)
-#define YY_REDUCE_MAX (1780)
+#define YY_REDUCE_COUNT (423)
+#define YY_REDUCE_MIN (-274)
+#define YY_REDUCE_MAX (1816)
static const short yy_reduce_ofst[] = {
- /* 0 */ -124, 913, 1432, 977, 1006, -119, -193, -191, -181, -185,
- /* 10 */ -183, 333, 349, -192, -102, -277, -27, -188, 485, 651,
- /* 20 */ 810, 815, 574, 865, 941, 630, 789, 944, -177, 862,
- /* 30 */ 1026, 77, 486, 385, 676, 209, 785, 950, 1030, 1071,
- /* 40 */ 1073, 1091, -261, -261, -261, -261, -261, -261, -261, -261,
- /* 50 */ -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
- /* 60 */ -261, -261, -261, -261, -261, -261, -261, -261, -261, -261,
- /* 70 */ -261, -261, -261, -261, -261, -261, -261, -261, -261, -175,
- /* 80 */ 200, 381, 503, 525, 530, 682, 843, 984, 989, 1121,
- /* 90 */ 1128, 1136, 1169, 1172, 1202, 1215, 1228, 1270, 1275, 1279,
- /* 100 */ 1295, 1300, 1316, 1347, 1357, 1366, 1377, 1379, 1387, 1399,
- /* 110 */ 1415, 1417, 1433, 1442, 1451, 1453, 1463, 1489, 1503, 1530,
- /* 120 */ 1533, 1535, 1539, 1541, 1551, 1567, 1569, 1578, 1586, 1595,
- /* 130 */ 1603, -261, -261, -261, -261, -261, -261, -261, -261, -261,
- /* 140 */ -261, -261, -126, 857, 771, 942, 197, 1003, -222, 1095,
- /* 150 */ -189, -190, 654, 243, 1221, 1261, 1221, -261, 1261, 884,
- /* 160 */ 731, 1020, 1028, -261, -261, -261, -261, 372, 372, 372,
- /* 170 */ 372, -133, 76, -187, -54, 120, 636, -161, 189, -60,
- /* 180 */ 274, 274, 239, 700, 842, -61, 172, 467, 488, 1027,
- /* 190 */ 1056, 1088, 429, 775, 555, 841, 998, 756, 1127, 1146,
- /* 200 */ 1131, 334, 1070, 138, 1234, 724, 407, 562, 537, 738,
- /* 210 */ 617, 766, 1094, 1132, 1208, 1244, -242, 955, 1175, 184,
- /* 220 */ 1102, 1225, 1271, 1286, 1290, -179, -147, -114, 199, 22,
- /* 230 */ 359, 380, 507, 575, 594, 685, 704, 710, 717, 794,
- /* 240 */ 912, 925, 987, 1048, 1067, 1090, 330, 1099, 1142, 1173,
- /* 250 */ 1189, 1227, 1248, 1384, 1391, 1416, 1419, 1445, 1447, 1458,
- /* 260 */ 1467, 1494, 1469, 1482, 1496, 1509, 1536, 1548, 1143, 1549,
- /* 270 */ 1555, 1561, 1498, 1459, 1571, 1588, 1546, 1598, 380, 1608,
- /* 280 */ 1612, 1614, 1615, 1616, 1624, 1625, 1619, 1532, 1537, 1580,
- /* 290 */ 1568, 1573, 1574, 1575, 1143, 1580, 1580, 1581, 1618, 1528,
- /* 300 */ 1562, 1564, 1590, 1570, 1540, 1592, 1565, 1572, 1594, 1576,
- /* 310 */ 1596, 1545, 1626, 1613, 1620, 1629, 1630, 1631, 1585, 1597,
- /* 320 */ 1599, 1600, 1602, 1604, 1577, 1607, 1611, 1659, 1563, 1566,
- /* 330 */ 1663, 1666, 1579, 1583, 1667, 1587, 1601, 1605, 1638, 1642,
- /* 340 */ 1643, 1644, 1645, 1646, 1684, 1687, 1647, 1623, 1627, 1648,
- /* 350 */ 1621, 1654, 1650, 1655, 1652, 1610, 1697, 1701, 1702, 1628,
- /* 360 */ 1632, 1705, 1707, 1686, 1708, 1710, 1711, 1713, 1689, 1696,
- /* 370 */ 1698, 1699, 1688, 1700, 1703, 1712, 1714, 1706, 1716, 1718,
- /* 380 */ 1720, 1721, 1633, 1636, 1653, 1657, 1723, 1729, 1637, 1639,
- /* 390 */ 1670, 1672, 1693, 1724, 1673, 1751, 1674, 1725, 1726, 1730,
- /* 400 */ 1732, 1756, 1767, 1768, 1771, 1772, 1773, 1662, 1664, 1668,
- /* 410 */ 1760, 1763, 1758, 1759, 1770, 1774, 1775, 1754, 1762, 1765,
- /* 420 */ 1778, 1780, 1779,
+ /* 0 */ 1376, 1097, 1021, -178, 1265, -121, -64, -197, -195, -176,
+ /* 10 */ -193, -189, -185, -174, 195, 346, 476, 624, 640, -205,
+ /* 20 */ -160, -264, 33, 352, 356, 483, 508, 650, 424, 653,
+ /* 30 */ 810, 573, 632, 921, 858, 689, 969, 976, 482, 716,
+ /* 40 */ 121, 235, 970, 118, 480, 790, 795, 918, 967, 918,
+ /* 50 */ 967, -274, -274, -274, -274, -274, -274, -274, -274, -274,
+ /* 60 */ -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
+ /* 70 */ -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
+ /* 80 */ -274, -274, -274, -274, -274, -274, -274, -274, -12, 359,
+ /* 90 */ 529, 657, 788, 1030, 1106, 1118, 1127, 1136, 1201, 1203,
+ /* 100 */ 1211, 1228, 1230, 1268, 1282, 1284, 1286, 1290, 1293, 1315,
+ /* 110 */ 1322, 1328, 1333, 1335, 1340, 1342, 1362, 1409, 1419, 1424,
+ /* 120 */ 1428, 1430, 1444, 1449, 1455, 1457, 1461, 1474, 1486, 1488,
+ /* 130 */ 1490, 1499, 1506, 1524, 1526, 1531, 1536, 1538, 1540, 1553,
+ /* 140 */ -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
+ /* 150 */ -274, -196, 243, -175, 805, 678, 981, 2, 537, 696,
+ /* 160 */ -274, 940, 927, 930, 983, -173, -274, -274, -274, -274,
+ /* 170 */ -181, -181, -181, -181, -66, 446, -187, -168, 279, 403,
+ /* 180 */ -200, 358, 475, 416, 416, -68, 221, 615, 374, 1069,
+ /* 190 */ 1125, 634, 1116, 1175, 1197, -194, 114, 36, 333, 792,
+ /* 200 */ 636, 831, 844, 1210, 56, 675, 1075, 635, 942, 1003,
+ /* 210 */ 428, -22, 1079, 1143, 1105, 1141, 986, 1222, 738, 1131,
+ /* 220 */ -112, 1213, 1216, 1223, 1231, 1269, -211, -206, 253, 502,
+ /* 230 */ 496, 577, 682, 705, 733, 758, 813, 836, 850, 859,
+ /* 240 */ 966, 994, 1022, 1273, 1344, 1350, 1354, 811, 1374, 1379,
+ /* 250 */ 1420, 1426, 1456, 1464, 1470, 1482, 1507, 1520, 1539, 1551,
+ /* 260 */ 1552, 1556, 1571, 956, 1412, 1533, 1572, 1573, 1574, 984,
+ /* 270 */ 1575, 1578, 1579, 1198, 1440, 1581, 1582, 1446, 1583, 682,
+ /* 280 */ 1587, 1588, 1589, 1591, 1592, 1593, 1594, 1597, 1487, 1484,
+ /* 290 */ 1537, 1522, 1535, 1541, 1544, 984, 1537, 1537, 1546, 1576,
+ /* 300 */ 1495, 1521, 1527, 1557, 1528, 1508, 1555, 1532, 1542, 1559,
+ /* 310 */ 1545, 1562, 1523, 1596, 1590, 1595, 1612, 1613, 1615, 1567,
+ /* 320 */ 1569, 1600, 1603, 1604, 1605, 1560, 1606, 1607, 1639, 1563,
+ /* 330 */ 1565, 1656, 1658, 1577, 1609, 1669, 1611, 1599, 1614, 1643,
+ /* 340 */ 1644, 1645, 1650, 1651, 1652, 1679, 1687, 1647, 1618, 1621,
+ /* 350 */ 1654, 1626, 1664, 1655, 1668, 1657, 1623, 1709, 1712, 1714,
+ /* 360 */ 1624, 1627, 1717, 1722, 1701, 1723, 1725, 1726, 1729, 1704,
+ /* 370 */ 1711, 1715, 1716, 1705, 1719, 1721, 1727, 1724, 1730, 1728,
+ /* 380 */ 1710, 1733, 1734, 1625, 1634, 1674, 1675, 1736, 1760, 1653,
+ /* 390 */ 1659, 1706, 1731, 1732, 1735, 1699, 1778, 1700, 1737, 1741,
+ /* 400 */ 1743, 1742, 1791, 1801, 1802, 1807, 1808, 1809, 1697, 1702,
+ /* 410 */ 1707, 1803, 1804, 1795, 1799, 1800, 1805, 1812, 1792, 1793,
+ /* 420 */ 1806, 1811, 1813, 1816,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 1687, 1687, 1687, 1514, 1274, 1390, 1274, 1274, 1274, 1514,
- /* 10 */ 1514, 1514, 1274, 1420, 1420, 1569, 1309, 1274, 1274, 1274,
- /* 20 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1513, 1274,
- /* 30 */ 1274, 1274, 1274, 1603, 1603, 1274, 1274, 1274, 1274, 1274,
- /* 40 */ 1274, 1274, 1274, 1429, 1274, 1436, 1274, 1274, 1274, 1274,
- /* 50 */ 1274, 1515, 1516, 1274, 1274, 1274, 1568, 1570, 1533, 1443,
- /* 60 */ 1442, 1441, 1440, 1551, 1408, 1434, 1427, 1431, 1510, 1511,
- /* 70 */ 1509, 1665, 1516, 1515, 1274, 1430, 1478, 1494, 1477, 1274,
- /* 80 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 90 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 100 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 110 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 120 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 130 */ 1274, 1486, 1493, 1492, 1491, 1500, 1490, 1487, 1480, 1479,
- /* 140 */ 1481, 1482, 1299, 1274, 1296, 1274, 1274, 1274, 1351, 1274,
- /* 150 */ 1274, 1274, 1274, 1274, 1589, 1588, 1274, 1483, 1274, 1309,
- /* 160 */ 1471, 1470, 1469, 1497, 1484, 1496, 1495, 1576, 1580, 1639,
- /* 170 */ 1638, 1274, 1534, 1274, 1274, 1274, 1274, 1274, 1274, 1603,
- /* 180 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 190 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 200 */ 1274, 1274, 1274, 1274, 1274, 1410, 1603, 1603, 1274, 1309,
- /* 210 */ 1603, 1603, 1411, 1411, 1305, 1305, 1414, 1274, 1584, 1381,
- /* 220 */ 1381, 1381, 1381, 1390, 1381, 1274, 1274, 1274, 1274, 1274,
- /* 230 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 240 */ 1573, 1571, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 250 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 260 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 270 */ 1274, 1274, 1386, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 280 */ 1274, 1274, 1274, 1274, 1274, 1632, 1281, 1274, 1546, 1368,
- /* 290 */ 1386, 1386, 1386, 1386, 1388, 1369, 1367, 1380, 1310, 1679,
- /* 300 */ 1446, 1435, 1387, 1435, 1676, 1433, 1446, 1446, 1433, 1446,
- /* 310 */ 1387, 1676, 1326, 1654, 1321, 1420, 1420, 1420, 1410, 1410,
- /* 320 */ 1410, 1410, 1414, 1414, 1512, 1387, 1380, 1274, 1679, 1679,
- /* 330 */ 1396, 1396, 1678, 1678, 1396, 1534, 1662, 1455, 1354, 1360,
- /* 340 */ 1360, 1360, 1360, 1360, 1396, 1293, 1433, 1662, 1662, 1433,
- /* 350 */ 1455, 1354, 1433, 1354, 1433, 1523, 1396, 1293, 1293, 1550,
- /* 360 */ 1673, 1396, 1293, 1524, 1396, 1293, 1396, 1293, 1524, 1352,
- /* 370 */ 1352, 1352, 1341, 1274, 1274, 1524, 1352, 1326, 1352, 1341,
- /* 380 */ 1352, 1352, 1621, 1274, 1528, 1528, 1524, 1396, 1613, 1613,
- /* 390 */ 1423, 1423, 1428, 1414, 1517, 1396, 1274, 1428, 1426, 1424,
- /* 400 */ 1433, 1344, 1635, 1635, 1631, 1631, 1631, 1684, 1684, 1584,
- /* 410 */ 1647, 1647, 1309, 1309, 1309, 1309, 1647, 1328, 1328, 1310,
- /* 420 */ 1310, 1309, 1647, 1274, 1274, 1274, 1274, 1578, 1274, 1274,
- /* 430 */ 1642, 1274, 1535, 1400, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 440 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 450 */ 1274, 1590, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 460 */ 1274, 1274, 1460, 1274, 1277, 1581, 1274, 1274, 1274, 1274,
- /* 470 */ 1274, 1274, 1274, 1274, 1274, 1274, 1437, 1438, 1401, 1274,
- /* 480 */ 1274, 1274, 1274, 1274, 1274, 1274, 1452, 1274, 1274, 1274,
- /* 490 */ 1447, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1675,
- /* 500 */ 1274, 1274, 1522, 1274, 1274, 1274, 1274, 1274, 1274, 1549,
- /* 510 */ 1548, 1274, 1274, 1398, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 520 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1324, 1274, 1274,
- /* 530 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 540 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 550 */ 1274, 1425, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 560 */ 1274, 1274, 1274, 1274, 1274, 1274, 1618, 1415, 1274, 1274,
- /* 570 */ 1274, 1274, 1666, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 580 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1658, 1371, 1461,
- /* 590 */ 1274, 1464, 1297, 1274, 1287, 1274, 1274,
+ /* 0 */ 1702, 1702, 1702, 1527, 1285, 1403, 1285, 1285, 1285, 1285,
+ /* 10 */ 1527, 1527, 1527, 1285, 1285, 1285, 1285, 1285, 1285, 1433,
+ /* 20 */ 1433, 1582, 1320, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 30 */ 1285, 1285, 1285, 1285, 1285, 1526, 1285, 1285, 1285, 1285,
+ /* 40 */ 1617, 1617, 1285, 1285, 1285, 1285, 1285, 1602, 1601, 1285,
+ /* 50 */ 1285, 1285, 1442, 1285, 1449, 1285, 1285, 1285, 1285, 1285,
+ /* 60 */ 1528, 1529, 1285, 1285, 1285, 1581, 1583, 1546, 1456, 1455,
+ /* 70 */ 1454, 1453, 1564, 1421, 1447, 1440, 1444, 1523, 1524, 1522,
+ /* 80 */ 1680, 1529, 1528, 1285, 1443, 1491, 1507, 1490, 1285, 1285,
+ /* 90 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 100 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 110 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 120 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 130 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 140 */ 1499, 1506, 1505, 1504, 1513, 1503, 1500, 1493, 1492, 1494,
+ /* 150 */ 1495, 1310, 1307, 1285, 1362, 1285, 1285, 1285, 1285, 1285,
+ /* 160 */ 1496, 1320, 1484, 1483, 1482, 1285, 1510, 1497, 1509, 1508,
+ /* 170 */ 1589, 1593, 1654, 1653, 1285, 1547, 1285, 1285, 1285, 1285,
+ /* 180 */ 1285, 1285, 1617, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 190 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 200 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1423, 1617, 1617,
+ /* 210 */ 1285, 1320, 1617, 1617, 1424, 1424, 1316, 1316, 1427, 1597,
+ /* 220 */ 1394, 1394, 1394, 1394, 1403, 1394, 1285, 1285, 1285, 1285,
+ /* 230 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 240 */ 1285, 1586, 1584, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 250 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 260 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 270 */ 1285, 1285, 1285, 1399, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 280 */ 1285, 1285, 1285, 1285, 1285, 1285, 1647, 1292, 1285, 1559,
+ /* 290 */ 1379, 1399, 1399, 1399, 1399, 1401, 1380, 1378, 1393, 1321,
+ /* 300 */ 1694, 1459, 1448, 1400, 1448, 1691, 1446, 1459, 1459, 1446,
+ /* 310 */ 1459, 1400, 1691, 1337, 1669, 1332, 1433, 1433, 1433, 1423,
+ /* 320 */ 1423, 1423, 1423, 1427, 1427, 1525, 1400, 1393, 1285, 1694,
+ /* 330 */ 1694, 1409, 1409, 1693, 1693, 1409, 1547, 1677, 1468, 1365,
+ /* 340 */ 1371, 1371, 1371, 1371, 1371, 1409, 1304, 1446, 1677, 1677,
+ /* 350 */ 1446, 1468, 1365, 1446, 1365, 1446, 1536, 1409, 1304, 1304,
+ /* 360 */ 1563, 1688, 1409, 1304, 1537, 1409, 1304, 1409, 1304, 1537,
+ /* 370 */ 1363, 1363, 1363, 1352, 1285, 1285, 1537, 1363, 1337, 1363,
+ /* 380 */ 1352, 1363, 1363, 1635, 1285, 1541, 1541, 1537, 1409, 1627,
+ /* 390 */ 1627, 1436, 1436, 1441, 1427, 1530, 1409, 1285, 1441, 1439,
+ /* 400 */ 1437, 1446, 1355, 1650, 1650, 1646, 1646, 1646, 1699, 1699,
+ /* 410 */ 1597, 1662, 1662, 1320, 1320, 1320, 1320, 1662, 1339, 1339,
+ /* 420 */ 1321, 1321, 1320, 1662, 1285, 1285, 1285, 1285, 1591, 1285,
+ /* 430 */ 1285, 1657, 1285, 1548, 1413, 1285, 1285, 1285, 1285, 1285,
+ /* 440 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 450 */ 1285, 1285, 1603, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 460 */ 1285, 1285, 1285, 1285, 1473, 1285, 1288, 1594, 1285, 1285,
+ /* 470 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1450, 1451,
+ /* 480 */ 1414, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1465, 1285,
+ /* 490 */ 1285, 1285, 1460, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 500 */ 1285, 1690, 1285, 1285, 1535, 1285, 1285, 1285, 1285, 1285,
+ /* 510 */ 1285, 1562, 1561, 1285, 1285, 1411, 1285, 1285, 1285, 1285,
+ /* 520 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1335,
+ /* 530 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 540 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 550 */ 1285, 1285, 1285, 1438, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 560 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1632, 1428,
+ /* 570 */ 1285, 1285, 1285, 1285, 1681, 1285, 1285, 1285, 1285, 1388,
+ /* 580 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 590 */ 1285, 1673, 1382, 1474, 1285, 1477, 1308, 1285, 1298, 1285,
+ /* 600 */ 1285,
};
/********** End of lemon-generated parsing tables *****************************/
@@ -174996,8 +176583,8 @@ static const YYCODETYPE yyFallback[] = {
0, /* AGG_COLUMN => nothing */
0, /* TRUEFALSE => nothing */
0, /* ISNOT => nothing */
- 0, /* UMINUS => nothing */
0, /* UPLUS => nothing */
+ 0, /* UMINUS => nothing */
0, /* TRUTH => nothing */
0, /* REGISTER => nothing */
0, /* VECTOR => nothing */
@@ -175006,6 +176593,7 @@ static const YYCODETYPE yyFallback[] = {
0, /* ASTERISK => nothing */
0, /* SPAN => nothing */
0, /* ERROR => nothing */
+ 0, /* QNUMBER => nothing */
0, /* SPACE => nothing */
0, /* ILLEGAL => nothing */
};
@@ -175048,14 +176636,9 @@ struct yyParser {
#endif
sqlite3ParserARG_SDECL /* A place to hold %extra_argument */
sqlite3ParserCTX_SDECL /* A place to hold %extra_context */
-#if YYSTACKDEPTH<=0
- int yystksz; /* Current side of the stack */
- yyStackEntry *yystack; /* The parser's stack */
- yyStackEntry yystk0; /* First stack entry */
-#else
- yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */
- yyStackEntry *yystackEnd; /* Last entry in the stack */
-#endif
+ yyStackEntry *yystackEnd; /* Last entry in the stack */
+ yyStackEntry *yystack; /* The parser stack */
+ yyStackEntry yystk0[YYSTACKDEPTH]; /* Initial stack space */
};
typedef struct yyParser yyParser;
@@ -175272,8 +176855,8 @@ static const char *const yyTokenName[] = {
/* 173 */ "AGG_COLUMN",
/* 174 */ "TRUEFALSE",
/* 175 */ "ISNOT",
- /* 176 */ "UMINUS",
- /* 177 */ "UPLUS",
+ /* 176 */ "UPLUS",
+ /* 177 */ "UMINUS",
/* 178 */ "TRUTH",
/* 179 */ "REGISTER",
/* 180 */ "VECTOR",
@@ -175282,143 +176865,146 @@ static const char *const yyTokenName[] = {
/* 183 */ "ASTERISK",
/* 184 */ "SPAN",
/* 185 */ "ERROR",
- /* 186 */ "SPACE",
- /* 187 */ "ILLEGAL",
- /* 188 */ "input",
- /* 189 */ "cmdlist",
- /* 190 */ "ecmd",
- /* 191 */ "cmdx",
- /* 192 */ "explain",
- /* 193 */ "cmd",
- /* 194 */ "transtype",
- /* 195 */ "trans_opt",
- /* 196 */ "nm",
- /* 197 */ "savepoint_opt",
- /* 198 */ "create_table",
- /* 199 */ "create_table_args",
- /* 200 */ "createkw",
- /* 201 */ "temp",
- /* 202 */ "ifnotexists",
- /* 203 */ "dbnm",
- /* 204 */ "columnlist",
- /* 205 */ "conslist_opt",
- /* 206 */ "table_option_set",
- /* 207 */ "select",
- /* 208 */ "table_option",
- /* 209 */ "columnname",
- /* 210 */ "carglist",
- /* 211 */ "typetoken",
- /* 212 */ "typename",
- /* 213 */ "signed",
- /* 214 */ "plus_num",
- /* 215 */ "minus_num",
- /* 216 */ "scanpt",
- /* 217 */ "scantok",
- /* 218 */ "ccons",
- /* 219 */ "term",
- /* 220 */ "expr",
- /* 221 */ "onconf",
- /* 222 */ "sortorder",
- /* 223 */ "autoinc",
- /* 224 */ "eidlist_opt",
- /* 225 */ "refargs",
- /* 226 */ "defer_subclause",
- /* 227 */ "generated",
- /* 228 */ "refarg",
- /* 229 */ "refact",
- /* 230 */ "init_deferred_pred_opt",
- /* 231 */ "conslist",
- /* 232 */ "tconscomma",
- /* 233 */ "tcons",
- /* 234 */ "sortlist",
- /* 235 */ "eidlist",
- /* 236 */ "defer_subclause_opt",
- /* 237 */ "orconf",
- /* 238 */ "resolvetype",
- /* 239 */ "raisetype",
- /* 240 */ "ifexists",
- /* 241 */ "fullname",
- /* 242 */ "selectnowith",
- /* 243 */ "oneselect",
- /* 244 */ "wqlist",
- /* 245 */ "multiselect_op",
- /* 246 */ "distinct",
- /* 247 */ "selcollist",
- /* 248 */ "from",
- /* 249 */ "where_opt",
- /* 250 */ "groupby_opt",
- /* 251 */ "having_opt",
- /* 252 */ "orderby_opt",
- /* 253 */ "limit_opt",
- /* 254 */ "window_clause",
- /* 255 */ "values",
- /* 256 */ "nexprlist",
- /* 257 */ "sclp",
- /* 258 */ "as",
- /* 259 */ "seltablist",
- /* 260 */ "stl_prefix",
- /* 261 */ "joinop",
- /* 262 */ "on_using",
- /* 263 */ "indexed_by",
- /* 264 */ "exprlist",
- /* 265 */ "xfullname",
- /* 266 */ "idlist",
- /* 267 */ "indexed_opt",
- /* 268 */ "nulls",
- /* 269 */ "with",
- /* 270 */ "where_opt_ret",
- /* 271 */ "setlist",
- /* 272 */ "insert_cmd",
- /* 273 */ "idlist_opt",
- /* 274 */ "upsert",
- /* 275 */ "returning",
- /* 276 */ "filter_over",
- /* 277 */ "likeop",
- /* 278 */ "between_op",
- /* 279 */ "in_op",
- /* 280 */ "paren_exprlist",
- /* 281 */ "case_operand",
- /* 282 */ "case_exprlist",
- /* 283 */ "case_else",
- /* 284 */ "uniqueflag",
- /* 285 */ "indextype",
- /* 286 */ "collate",
- /* 287 */ "vinto",
- /* 288 */ "nmnum",
- /* 289 */ "trigger_decl",
- /* 290 */ "trigger_cmd_list",
- /* 291 */ "trigger_time",
- /* 292 */ "trigger_event",
- /* 293 */ "foreach_clause",
- /* 294 */ "when_clause",
- /* 295 */ "trigger_cmd",
- /* 296 */ "trnm",
- /* 297 */ "tridxby",
- /* 298 */ "database_kw_opt",
- /* 299 */ "key_opt",
- /* 300 */ "add_column_fullname",
- /* 301 */ "kwcolumn_opt",
- /* 302 */ "create_vtab",
- /* 303 */ "vtabarglist",
- /* 304 */ "vtabarg",
- /* 305 */ "vtabargtoken",
- /* 306 */ "lp",
- /* 307 */ "anylist",
- /* 308 */ "wqitem",
- /* 309 */ "wqas",
- /* 310 */ "windowdefn_list",
- /* 311 */ "windowdefn",
- /* 312 */ "window",
- /* 313 */ "frame_opt",
- /* 314 */ "part_opt",
- /* 315 */ "filter_clause",
- /* 316 */ "over_clause",
- /* 317 */ "range_or_rows",
- /* 318 */ "frame_bound",
- /* 319 */ "frame_bound_s",
- /* 320 */ "frame_bound_e",
- /* 321 */ "frame_exclude_opt",
- /* 322 */ "frame_exclude",
+ /* 186 */ "QNUMBER",
+ /* 187 */ "SPACE",
+ /* 188 */ "ILLEGAL",
+ /* 189 */ "input",
+ /* 190 */ "cmdlist",
+ /* 191 */ "ecmd",
+ /* 192 */ "cmdx",
+ /* 193 */ "explain",
+ /* 194 */ "cmd",
+ /* 195 */ "transtype",
+ /* 196 */ "trans_opt",
+ /* 197 */ "nm",
+ /* 198 */ "savepoint_opt",
+ /* 199 */ "create_table",
+ /* 200 */ "create_table_args",
+ /* 201 */ "createkw",
+ /* 202 */ "temp",
+ /* 203 */ "ifnotexists",
+ /* 204 */ "dbnm",
+ /* 205 */ "columnlist",
+ /* 206 */ "conslist_opt",
+ /* 207 */ "table_option_set",
+ /* 208 */ "select",
+ /* 209 */ "table_option",
+ /* 210 */ "columnname",
+ /* 211 */ "carglist",
+ /* 212 */ "typetoken",
+ /* 213 */ "typename",
+ /* 214 */ "signed",
+ /* 215 */ "plus_num",
+ /* 216 */ "minus_num",
+ /* 217 */ "scanpt",
+ /* 218 */ "scantok",
+ /* 219 */ "ccons",
+ /* 220 */ "term",
+ /* 221 */ "expr",
+ /* 222 */ "onconf",
+ /* 223 */ "sortorder",
+ /* 224 */ "autoinc",
+ /* 225 */ "eidlist_opt",
+ /* 226 */ "refargs",
+ /* 227 */ "defer_subclause",
+ /* 228 */ "generated",
+ /* 229 */ "refarg",
+ /* 230 */ "refact",
+ /* 231 */ "init_deferred_pred_opt",
+ /* 232 */ "conslist",
+ /* 233 */ "tconscomma",
+ /* 234 */ "tcons",
+ /* 235 */ "sortlist",
+ /* 236 */ "eidlist",
+ /* 237 */ "defer_subclause_opt",
+ /* 238 */ "orconf",
+ /* 239 */ "resolvetype",
+ /* 240 */ "raisetype",
+ /* 241 */ "ifexists",
+ /* 242 */ "fullname",
+ /* 243 */ "selectnowith",
+ /* 244 */ "oneselect",
+ /* 245 */ "wqlist",
+ /* 246 */ "multiselect_op",
+ /* 247 */ "distinct",
+ /* 248 */ "selcollist",
+ /* 249 */ "from",
+ /* 250 */ "where_opt",
+ /* 251 */ "groupby_opt",
+ /* 252 */ "having_opt",
+ /* 253 */ "orderby_opt",
+ /* 254 */ "limit_opt",
+ /* 255 */ "window_clause",
+ /* 256 */ "values",
+ /* 257 */ "nexprlist",
+ /* 258 */ "mvalues",
+ /* 259 */ "sclp",
+ /* 260 */ "as",
+ /* 261 */ "seltablist",
+ /* 262 */ "stl_prefix",
+ /* 263 */ "joinop",
+ /* 264 */ "on_using",
+ /* 265 */ "indexed_by",
+ /* 266 */ "exprlist",
+ /* 267 */ "xfullname",
+ /* 268 */ "idlist",
+ /* 269 */ "indexed_opt",
+ /* 270 */ "nulls",
+ /* 271 */ "with",
+ /* 272 */ "where_opt_ret",
+ /* 273 */ "setlist",
+ /* 274 */ "insert_cmd",
+ /* 275 */ "idlist_opt",
+ /* 276 */ "upsert",
+ /* 277 */ "returning",
+ /* 278 */ "filter_over",
+ /* 279 */ "likeop",
+ /* 280 */ "between_op",
+ /* 281 */ "in_op",
+ /* 282 */ "paren_exprlist",
+ /* 283 */ "case_operand",
+ /* 284 */ "case_exprlist",
+ /* 285 */ "case_else",
+ /* 286 */ "uniqueflag",
+ /* 287 */ "indextype",
+ /* 288 */ "collate",
+ /* 289 */ "vinto",
+ /* 290 */ "nmnum",
+ /* 291 */ "trigger_decl",
+ /* 292 */ "trigger_cmd_list",
+ /* 293 */ "trigger_time",
+ /* 294 */ "trigger_event",
+ /* 295 */ "foreach_clause",
+ /* 296 */ "when_clause",
+ /* 297 */ "trigger_cmd",
+ /* 298 */ "trnm",
+ /* 299 */ "tridxby",
+ /* 300 */ "database_kw_opt",
+ /* 301 */ "key_opt",
+ /* 302 */ "add_column_fullname",
+ /* 303 */ "kwcolumn_opt",
+ /* 304 */ "create_vtab",
+ /* 305 */ "vtabarglist",
+ /* 306 */ "vtabarg",
+ /* 307 */ "vtabargtoken",
+ /* 308 */ "lp",
+ /* 309 */ "anylist",
+ /* 310 */ "wqitem",
+ /* 311 */ "wqas",
+ /* 312 */ "withnm",
+ /* 313 */ "windowdefn_list",
+ /* 314 */ "windowdefn",
+ /* 315 */ "window",
+ /* 316 */ "frame_opt",
+ /* 317 */ "part_opt",
+ /* 318 */ "filter_clause",
+ /* 319 */ "over_clause",
+ /* 320 */ "range_or_rows",
+ /* 321 */ "frame_bound",
+ /* 322 */ "frame_bound_s",
+ /* 323 */ "frame_bound_e",
+ /* 324 */ "frame_exclude_opt",
+ /* 325 */ "frame_exclude",
};
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
@@ -175526,354 +177112,366 @@ static const char *const yyRuleName[] = {
/* 97 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
/* 98 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt",
/* 99 */ "values ::= VALUES LP nexprlist RP",
- /* 100 */ "values ::= values COMMA LP nexprlist RP",
- /* 101 */ "distinct ::= DISTINCT",
- /* 102 */ "distinct ::= ALL",
- /* 103 */ "distinct ::=",
- /* 104 */ "sclp ::=",
- /* 105 */ "selcollist ::= sclp scanpt expr scanpt as",
- /* 106 */ "selcollist ::= sclp scanpt STAR",
- /* 107 */ "selcollist ::= sclp scanpt nm DOT STAR",
- /* 108 */ "as ::= AS nm",
- /* 109 */ "as ::=",
- /* 110 */ "from ::=",
- /* 111 */ "from ::= FROM seltablist",
- /* 112 */ "stl_prefix ::= seltablist joinop",
- /* 113 */ "stl_prefix ::=",
- /* 114 */ "seltablist ::= stl_prefix nm dbnm as on_using",
- /* 115 */ "seltablist ::= stl_prefix nm dbnm as indexed_by on_using",
- /* 116 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using",
- /* 117 */ "seltablist ::= stl_prefix LP select RP as on_using",
- /* 118 */ "seltablist ::= stl_prefix LP seltablist RP as on_using",
- /* 119 */ "dbnm ::=",
- /* 120 */ "dbnm ::= DOT nm",
- /* 121 */ "fullname ::= nm",
- /* 122 */ "fullname ::= nm DOT nm",
- /* 123 */ "xfullname ::= nm",
- /* 124 */ "xfullname ::= nm DOT nm",
- /* 125 */ "xfullname ::= nm DOT nm AS nm",
- /* 126 */ "xfullname ::= nm AS nm",
- /* 127 */ "joinop ::= COMMA|JOIN",
- /* 128 */ "joinop ::= JOIN_KW JOIN",
- /* 129 */ "joinop ::= JOIN_KW nm JOIN",
- /* 130 */ "joinop ::= JOIN_KW nm nm JOIN",
- /* 131 */ "on_using ::= ON expr",
- /* 132 */ "on_using ::= USING LP idlist RP",
- /* 133 */ "on_using ::=",
- /* 134 */ "indexed_opt ::=",
- /* 135 */ "indexed_by ::= INDEXED BY nm",
- /* 136 */ "indexed_by ::= NOT INDEXED",
- /* 137 */ "orderby_opt ::=",
- /* 138 */ "orderby_opt ::= ORDER BY sortlist",
- /* 139 */ "sortlist ::= sortlist COMMA expr sortorder nulls",
- /* 140 */ "sortlist ::= expr sortorder nulls",
- /* 141 */ "sortorder ::= ASC",
- /* 142 */ "sortorder ::= DESC",
- /* 143 */ "sortorder ::=",
- /* 144 */ "nulls ::= NULLS FIRST",
- /* 145 */ "nulls ::= NULLS LAST",
- /* 146 */ "nulls ::=",
- /* 147 */ "groupby_opt ::=",
- /* 148 */ "groupby_opt ::= GROUP BY nexprlist",
- /* 149 */ "having_opt ::=",
- /* 150 */ "having_opt ::= HAVING expr",
- /* 151 */ "limit_opt ::=",
- /* 152 */ "limit_opt ::= LIMIT expr",
- /* 153 */ "limit_opt ::= LIMIT expr OFFSET expr",
- /* 154 */ "limit_opt ::= LIMIT expr COMMA expr",
- /* 155 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret",
- /* 156 */ "where_opt ::=",
- /* 157 */ "where_opt ::= WHERE expr",
- /* 158 */ "where_opt_ret ::=",
- /* 159 */ "where_opt_ret ::= WHERE expr",
- /* 160 */ "where_opt_ret ::= RETURNING selcollist",
- /* 161 */ "where_opt_ret ::= WHERE expr RETURNING selcollist",
- /* 162 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret",
- /* 163 */ "setlist ::= setlist COMMA nm EQ expr",
- /* 164 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
- /* 165 */ "setlist ::= nm EQ expr",
- /* 166 */ "setlist ::= LP idlist RP EQ expr",
- /* 167 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert",
- /* 168 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning",
- /* 169 */ "upsert ::=",
- /* 170 */ "upsert ::= RETURNING selcollist",
- /* 171 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert",
- /* 172 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert",
- /* 173 */ "upsert ::= ON CONFLICT DO NOTHING returning",
- /* 174 */ "upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning",
- /* 175 */ "returning ::= RETURNING selcollist",
- /* 176 */ "insert_cmd ::= INSERT orconf",
- /* 177 */ "insert_cmd ::= REPLACE",
- /* 178 */ "idlist_opt ::=",
- /* 179 */ "idlist_opt ::= LP idlist RP",
- /* 180 */ "idlist ::= idlist COMMA nm",
- /* 181 */ "idlist ::= nm",
- /* 182 */ "expr ::= LP expr RP",
- /* 183 */ "expr ::= ID|INDEXED|JOIN_KW",
- /* 184 */ "expr ::= nm DOT nm",
- /* 185 */ "expr ::= nm DOT nm DOT nm",
- /* 186 */ "term ::= NULL|FLOAT|BLOB",
- /* 187 */ "term ::= STRING",
- /* 188 */ "term ::= INTEGER",
- /* 189 */ "expr ::= VARIABLE",
- /* 190 */ "expr ::= expr COLLATE ID|STRING",
- /* 191 */ "expr ::= CAST LP expr AS typetoken RP",
- /* 192 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP",
- /* 193 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP",
- /* 194 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP",
- /* 195 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over",
- /* 196 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over",
- /* 197 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over",
- /* 198 */ "term ::= CTIME_KW",
- /* 199 */ "expr ::= LP nexprlist COMMA expr RP",
- /* 200 */ "expr ::= expr AND expr",
- /* 201 */ "expr ::= expr OR expr",
- /* 202 */ "expr ::= expr LT|GT|GE|LE expr",
- /* 203 */ "expr ::= expr EQ|NE expr",
- /* 204 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
- /* 205 */ "expr ::= expr PLUS|MINUS expr",
- /* 206 */ "expr ::= expr STAR|SLASH|REM expr",
- /* 207 */ "expr ::= expr CONCAT expr",
- /* 208 */ "likeop ::= NOT LIKE_KW|MATCH",
- /* 209 */ "expr ::= expr likeop expr",
- /* 210 */ "expr ::= expr likeop expr ESCAPE expr",
- /* 211 */ "expr ::= expr ISNULL|NOTNULL",
- /* 212 */ "expr ::= expr NOT NULL",
- /* 213 */ "expr ::= expr IS expr",
- /* 214 */ "expr ::= expr IS NOT expr",
- /* 215 */ "expr ::= expr IS NOT DISTINCT FROM expr",
- /* 216 */ "expr ::= expr IS DISTINCT FROM expr",
- /* 217 */ "expr ::= NOT expr",
- /* 218 */ "expr ::= BITNOT expr",
- /* 219 */ "expr ::= PLUS|MINUS expr",
- /* 220 */ "expr ::= expr PTR expr",
- /* 221 */ "between_op ::= BETWEEN",
- /* 222 */ "between_op ::= NOT BETWEEN",
- /* 223 */ "expr ::= expr between_op expr AND expr",
- /* 224 */ "in_op ::= IN",
- /* 225 */ "in_op ::= NOT IN",
- /* 226 */ "expr ::= expr in_op LP exprlist RP",
- /* 227 */ "expr ::= LP select RP",
- /* 228 */ "expr ::= expr in_op LP select RP",
- /* 229 */ "expr ::= expr in_op nm dbnm paren_exprlist",
- /* 230 */ "expr ::= EXISTS LP select RP",
- /* 231 */ "expr ::= CASE case_operand case_exprlist case_else END",
- /* 232 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 233 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 234 */ "case_else ::= ELSE expr",
- /* 235 */ "case_else ::=",
- /* 236 */ "case_operand ::=",
- /* 237 */ "exprlist ::=",
- /* 238 */ "nexprlist ::= nexprlist COMMA expr",
- /* 239 */ "nexprlist ::= expr",
- /* 240 */ "paren_exprlist ::=",
- /* 241 */ "paren_exprlist ::= LP exprlist RP",
- /* 242 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm indextype ON nm LP sortlist RP where_opt",
- /* 243 */ "uniqueflag ::= UNIQUE",
- /* 244 */ "uniqueflag ::=",
- /* 245 */ "indextype ::= USING idlist",
- /* 246 */ "indextype ::=",
- /* 247 */ "eidlist_opt ::=",
- /* 248 */ "eidlist_opt ::= LP eidlist RP",
- /* 249 */ "eidlist ::= eidlist COMMA nm collate sortorder",
- /* 250 */ "eidlist ::= nm collate sortorder",
- /* 251 */ "collate ::=",
- /* 252 */ "collate ::= COLLATE ID|STRING",
- /* 253 */ "cmd ::= DROP INDEX ifexists fullname",
- /* 254 */ "cmd ::= VACUUM vinto",
- /* 255 */ "cmd ::= VACUUM nm vinto",
- /* 256 */ "vinto ::= INTO expr",
- /* 257 */ "vinto ::=",
- /* 258 */ "cmd ::= PRAGMA nm dbnm",
- /* 259 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
- /* 260 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
- /* 261 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
- /* 262 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
- /* 263 */ "plus_num ::= PLUS INTEGER|FLOAT",
- /* 264 */ "minus_num ::= MINUS INTEGER|FLOAT",
- /* 265 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
- /* 266 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
- /* 267 */ "trigger_time ::= BEFORE|AFTER",
- /* 268 */ "trigger_time ::= INSTEAD OF",
- /* 269 */ "trigger_time ::=",
- /* 270 */ "trigger_event ::= DELETE|INSERT",
- /* 271 */ "trigger_event ::= UPDATE",
- /* 272 */ "trigger_event ::= UPDATE OF idlist",
- /* 273 */ "when_clause ::=",
- /* 274 */ "when_clause ::= WHEN expr",
- /* 275 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
- /* 276 */ "trigger_cmd_list ::= trigger_cmd SEMI",
- /* 277 */ "trnm ::= nm DOT nm",
- /* 278 */ "tridxby ::= INDEXED BY nm",
- /* 279 */ "tridxby ::= NOT INDEXED",
- /* 280 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt",
- /* 281 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt",
- /* 282 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt",
- /* 283 */ "trigger_cmd ::= scanpt select scanpt",
- /* 284 */ "expr ::= RAISE LP IGNORE RP",
- /* 285 */ "expr ::= RAISE LP raisetype COMMA nm RP",
- /* 286 */ "raisetype ::= ROLLBACK",
- /* 287 */ "raisetype ::= ABORT",
- /* 288 */ "raisetype ::= FAIL",
- /* 289 */ "cmd ::= DROP TRIGGER ifexists fullname",
- /* 290 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
- /* 291 */ "cmd ::= DETACH database_kw_opt expr",
- /* 292 */ "key_opt ::=",
- /* 293 */ "key_opt ::= KEY expr",
- /* 294 */ "cmd ::= REINDEX",
- /* 295 */ "cmd ::= REINDEX nm dbnm",
- /* 296 */ "cmd ::= ANALYZE",
- /* 297 */ "cmd ::= ANALYZE nm dbnm",
- /* 298 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 299 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist",
- /* 300 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm",
- /* 301 */ "add_column_fullname ::= fullname",
- /* 302 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm",
- /* 303 */ "cmd ::= ALTER TABLE fullname ALTER COLUMNKW columnname TO columnname carglist",
- /* 304 */ "cmd ::= create_vtab",
- /* 305 */ "cmd ::= create_vtab LP vtabarglist RP",
- /* 306 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm",
- /* 307 */ "vtabarg ::=",
- /* 308 */ "vtabargtoken ::= ANY",
- /* 309 */ "vtabargtoken ::= lp anylist RP",
- /* 310 */ "lp ::= LP",
- /* 311 */ "with ::= WITH wqlist",
- /* 312 */ "with ::= WITH RECURSIVE wqlist",
- /* 313 */ "wqas ::= AS",
- /* 314 */ "wqas ::= AS MATERIALIZED",
- /* 315 */ "wqas ::= AS NOT MATERIALIZED",
- /* 316 */ "wqitem ::= nm eidlist_opt wqas LP select RP",
- /* 317 */ "wqlist ::= wqitem",
- /* 318 */ "wqlist ::= wqlist COMMA wqitem",
- /* 319 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn",
- /* 320 */ "windowdefn ::= nm AS LP window RP",
- /* 321 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt",
- /* 322 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt",
- /* 323 */ "window ::= ORDER BY sortlist frame_opt",
- /* 324 */ "window ::= nm ORDER BY sortlist frame_opt",
- /* 325 */ "window ::= nm frame_opt",
- /* 326 */ "frame_opt ::=",
- /* 327 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt",
- /* 328 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt",
- /* 329 */ "range_or_rows ::= RANGE|ROWS|GROUPS",
- /* 330 */ "frame_bound_s ::= frame_bound",
- /* 331 */ "frame_bound_s ::= UNBOUNDED PRECEDING",
- /* 332 */ "frame_bound_e ::= frame_bound",
- /* 333 */ "frame_bound_e ::= UNBOUNDED FOLLOWING",
- /* 334 */ "frame_bound ::= expr PRECEDING|FOLLOWING",
- /* 335 */ "frame_bound ::= CURRENT ROW",
- /* 336 */ "frame_exclude_opt ::=",
- /* 337 */ "frame_exclude_opt ::= EXCLUDE frame_exclude",
- /* 338 */ "frame_exclude ::= NO OTHERS",
- /* 339 */ "frame_exclude ::= CURRENT ROW",
- /* 340 */ "frame_exclude ::= GROUP|TIES",
- /* 341 */ "window_clause ::= WINDOW windowdefn_list",
- /* 342 */ "filter_over ::= filter_clause over_clause",
- /* 343 */ "filter_over ::= over_clause",
- /* 344 */ "filter_over ::= filter_clause",
- /* 345 */ "over_clause ::= OVER LP window RP",
- /* 346 */ "over_clause ::= OVER nm",
- /* 347 */ "filter_clause ::= FILTER LP WHERE expr RP",
- /* 348 */ "input ::= cmdlist",
- /* 349 */ "cmdlist ::= cmdlist ecmd",
- /* 350 */ "cmdlist ::= ecmd",
- /* 351 */ "ecmd ::= SEMI",
- /* 352 */ "ecmd ::= cmdx SEMI",
- /* 353 */ "ecmd ::= explain cmdx SEMI",
- /* 354 */ "trans_opt ::=",
- /* 355 */ "trans_opt ::= TRANSACTION",
- /* 356 */ "trans_opt ::= TRANSACTION nm",
- /* 357 */ "savepoint_opt ::= SAVEPOINT",
- /* 358 */ "savepoint_opt ::=",
- /* 359 */ "cmd ::= create_table create_table_args",
- /* 360 */ "table_option_set ::= table_option",
- /* 361 */ "columnlist ::= columnlist COMMA columnname carglist",
- /* 362 */ "columnlist ::= columnname carglist",
- /* 363 */ "nm ::= ID|INDEXED|JOIN_KW",
- /* 364 */ "nm ::= STRING",
- /* 365 */ "typetoken ::= typename",
- /* 366 */ "typename ::= ID|STRING",
- /* 367 */ "signed ::= plus_num",
- /* 368 */ "signed ::= minus_num",
- /* 369 */ "carglist ::= carglist ccons",
- /* 370 */ "carglist ::=",
- /* 371 */ "ccons ::= NULL onconf",
- /* 372 */ "ccons ::= GENERATED ALWAYS AS generated",
- /* 373 */ "ccons ::= AS generated",
- /* 374 */ "conslist_opt ::= COMMA conslist",
- /* 375 */ "conslist ::= conslist tconscomma tcons",
- /* 376 */ "conslist ::= tcons",
- /* 377 */ "tconscomma ::=",
- /* 378 */ "defer_subclause_opt ::= defer_subclause",
- /* 379 */ "resolvetype ::= raisetype",
- /* 380 */ "selectnowith ::= oneselect",
- /* 381 */ "oneselect ::= values",
- /* 382 */ "sclp ::= selcollist COMMA",
- /* 383 */ "as ::= ID|STRING",
- /* 384 */ "indexed_opt ::= indexed_by",
- /* 385 */ "returning ::=",
- /* 386 */ "expr ::= term",
- /* 387 */ "likeop ::= LIKE_KW|MATCH",
- /* 388 */ "case_operand ::= expr",
- /* 389 */ "exprlist ::= nexprlist",
- /* 390 */ "nmnum ::= plus_num",
- /* 391 */ "nmnum ::= nm",
- /* 392 */ "nmnum ::= ON",
- /* 393 */ "nmnum ::= DELETE",
- /* 394 */ "nmnum ::= DEFAULT",
- /* 395 */ "plus_num ::= INTEGER|FLOAT",
- /* 396 */ "foreach_clause ::=",
- /* 397 */ "foreach_clause ::= FOR EACH ROW",
- /* 398 */ "trnm ::= nm",
- /* 399 */ "tridxby ::=",
- /* 400 */ "database_kw_opt ::= DATABASE",
- /* 401 */ "database_kw_opt ::=",
- /* 402 */ "kwcolumn_opt ::=",
- /* 403 */ "kwcolumn_opt ::= COLUMNKW",
- /* 404 */ "vtabarglist ::= vtabarg",
- /* 405 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
- /* 406 */ "vtabarg ::= vtabarg vtabargtoken",
- /* 407 */ "anylist ::=",
- /* 408 */ "anylist ::= anylist LP anylist RP",
- /* 409 */ "anylist ::= anylist ANY",
- /* 410 */ "with ::=",
- /* 411 */ "windowdefn_list ::= windowdefn",
- /* 412 */ "window ::= frame_opt",
+ /* 100 */ "oneselect ::= mvalues",
+ /* 101 */ "mvalues ::= values COMMA LP nexprlist RP",
+ /* 102 */ "mvalues ::= mvalues COMMA LP nexprlist RP",
+ /* 103 */ "distinct ::= DISTINCT",
+ /* 104 */ "distinct ::= ALL",
+ /* 105 */ "distinct ::=",
+ /* 106 */ "sclp ::=",
+ /* 107 */ "selcollist ::= sclp scanpt expr scanpt as",
+ /* 108 */ "selcollist ::= sclp scanpt STAR",
+ /* 109 */ "selcollist ::= sclp scanpt nm DOT STAR",
+ /* 110 */ "as ::= AS nm",
+ /* 111 */ "as ::=",
+ /* 112 */ "from ::=",
+ /* 113 */ "from ::= FROM seltablist",
+ /* 114 */ "stl_prefix ::= seltablist joinop",
+ /* 115 */ "stl_prefix ::=",
+ /* 116 */ "seltablist ::= stl_prefix nm dbnm as on_using",
+ /* 117 */ "seltablist ::= stl_prefix nm dbnm as indexed_by on_using",
+ /* 118 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using",
+ /* 119 */ "seltablist ::= stl_prefix LP select RP as on_using",
+ /* 120 */ "seltablist ::= stl_prefix LP seltablist RP as on_using",
+ /* 121 */ "dbnm ::=",
+ /* 122 */ "dbnm ::= DOT nm",
+ /* 123 */ "fullname ::= nm",
+ /* 124 */ "fullname ::= nm DOT nm",
+ /* 125 */ "xfullname ::= nm",
+ /* 126 */ "xfullname ::= nm DOT nm",
+ /* 127 */ "xfullname ::= nm DOT nm AS nm",
+ /* 128 */ "xfullname ::= nm AS nm",
+ /* 129 */ "joinop ::= COMMA|JOIN",
+ /* 130 */ "joinop ::= JOIN_KW JOIN",
+ /* 131 */ "joinop ::= JOIN_KW nm JOIN",
+ /* 132 */ "joinop ::= JOIN_KW nm nm JOIN",
+ /* 133 */ "on_using ::= ON expr",
+ /* 134 */ "on_using ::= USING LP idlist RP",
+ /* 135 */ "on_using ::=",
+ /* 136 */ "indexed_opt ::=",
+ /* 137 */ "indexed_by ::= INDEXED BY nm",
+ /* 138 */ "indexed_by ::= NOT INDEXED",
+ /* 139 */ "orderby_opt ::=",
+ /* 140 */ "orderby_opt ::= ORDER BY sortlist",
+ /* 141 */ "sortlist ::= sortlist COMMA expr sortorder nulls",
+ /* 142 */ "sortlist ::= expr sortorder nulls",
+ /* 143 */ "sortorder ::= ASC",
+ /* 144 */ "sortorder ::= DESC",
+ /* 145 */ "sortorder ::=",
+ /* 146 */ "nulls ::= NULLS FIRST",
+ /* 147 */ "nulls ::= NULLS LAST",
+ /* 148 */ "nulls ::=",
+ /* 149 */ "groupby_opt ::=",
+ /* 150 */ "groupby_opt ::= GROUP BY nexprlist",
+ /* 151 */ "having_opt ::=",
+ /* 152 */ "having_opt ::= HAVING expr",
+ /* 153 */ "limit_opt ::=",
+ /* 154 */ "limit_opt ::= LIMIT expr",
+ /* 155 */ "limit_opt ::= LIMIT expr OFFSET expr",
+ /* 156 */ "limit_opt ::= LIMIT expr COMMA expr",
+ /* 157 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret",
+ /* 158 */ "where_opt ::=",
+ /* 159 */ "where_opt ::= WHERE expr",
+ /* 160 */ "where_opt_ret ::=",
+ /* 161 */ "where_opt_ret ::= WHERE expr",
+ /* 162 */ "where_opt_ret ::= RETURNING selcollist",
+ /* 163 */ "where_opt_ret ::= WHERE expr RETURNING selcollist",
+ /* 164 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret",
+ /* 165 */ "setlist ::= setlist COMMA nm EQ expr",
+ /* 166 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
+ /* 167 */ "setlist ::= nm EQ expr",
+ /* 168 */ "setlist ::= LP idlist RP EQ expr",
+ /* 169 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert",
+ /* 170 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning",
+ /* 171 */ "upsert ::=",
+ /* 172 */ "upsert ::= RETURNING selcollist",
+ /* 173 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert",
+ /* 174 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert",
+ /* 175 */ "upsert ::= ON CONFLICT DO NOTHING returning",
+ /* 176 */ "upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning",
+ /* 177 */ "returning ::= RETURNING selcollist",
+ /* 178 */ "insert_cmd ::= INSERT orconf",
+ /* 179 */ "insert_cmd ::= REPLACE",
+ /* 180 */ "idlist_opt ::=",
+ /* 181 */ "idlist_opt ::= LP idlist RP",
+ /* 182 */ "idlist ::= idlist COMMA nm",
+ /* 183 */ "idlist ::= nm",
+ /* 184 */ "expr ::= LP expr RP",
+ /* 185 */ "expr ::= ID|INDEXED|JOIN_KW",
+ /* 186 */ "expr ::= nm DOT nm",
+ /* 187 */ "expr ::= nm DOT nm DOT nm",
+ /* 188 */ "term ::= NULL|FLOAT|BLOB",
+ /* 189 */ "term ::= STRING",
+ /* 190 */ "term ::= INTEGER",
+ /* 191 */ "expr ::= VARIABLE",
+ /* 192 */ "expr ::= expr COLLATE ID|STRING",
+ /* 193 */ "expr ::= CAST LP expr AS typetoken RP",
+ /* 194 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP",
+ /* 195 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP",
+ /* 196 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP",
+ /* 197 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over",
+ /* 198 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over",
+ /* 199 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over",
+ /* 200 */ "term ::= CTIME_KW",
+ /* 201 */ "expr ::= LP nexprlist COMMA expr RP",
+ /* 202 */ "expr ::= expr AND expr",
+ /* 203 */ "expr ::= expr OR expr",
+ /* 204 */ "expr ::= expr LT|GT|GE|LE expr",
+ /* 205 */ "expr ::= expr EQ|NE expr",
+ /* 206 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
+ /* 207 */ "expr ::= expr PLUS|MINUS expr",
+ /* 208 */ "expr ::= expr STAR|SLASH|REM expr",
+ /* 209 */ "expr ::= expr CONCAT expr",
+ /* 210 */ "likeop ::= NOT LIKE_KW|MATCH",
+ /* 211 */ "expr ::= expr likeop expr",
+ /* 212 */ "expr ::= expr likeop expr ESCAPE expr",
+ /* 213 */ "expr ::= expr ISNULL|NOTNULL",
+ /* 214 */ "expr ::= expr NOT NULL",
+ /* 215 */ "expr ::= expr IS expr",
+ /* 216 */ "expr ::= expr IS NOT expr",
+ /* 217 */ "expr ::= expr IS NOT DISTINCT FROM expr",
+ /* 218 */ "expr ::= expr IS DISTINCT FROM expr",
+ /* 219 */ "expr ::= NOT expr",
+ /* 220 */ "expr ::= BITNOT expr",
+ /* 221 */ "expr ::= PLUS|MINUS expr",
+ /* 222 */ "expr ::= expr PTR expr",
+ /* 223 */ "between_op ::= BETWEEN",
+ /* 224 */ "between_op ::= NOT BETWEEN",
+ /* 225 */ "expr ::= expr between_op expr AND expr",
+ /* 226 */ "in_op ::= IN",
+ /* 227 */ "in_op ::= NOT IN",
+ /* 228 */ "expr ::= expr in_op LP exprlist RP",
+ /* 229 */ "expr ::= LP select RP",
+ /* 230 */ "expr ::= expr in_op LP select RP",
+ /* 231 */ "expr ::= expr in_op nm dbnm paren_exprlist",
+ /* 232 */ "expr ::= EXISTS LP select RP",
+ /* 233 */ "expr ::= CASE case_operand case_exprlist case_else END",
+ /* 234 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 235 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 236 */ "case_else ::= ELSE expr",
+ /* 237 */ "case_else ::=",
+ /* 238 */ "case_operand ::=",
+ /* 239 */ "exprlist ::=",
+ /* 240 */ "nexprlist ::= nexprlist COMMA expr",
+ /* 241 */ "nexprlist ::= expr",
+ /* 242 */ "paren_exprlist ::=",
+ /* 243 */ "paren_exprlist ::= LP exprlist RP",
+ /* 244 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm indextype ON nm LP sortlist RP where_opt",
+ /* 245 */ "uniqueflag ::= UNIQUE",
+ /* 246 */ "uniqueflag ::=",
+ /* 247 */ "indextype ::= USING idlist",
+ /* 248 */ "indextype ::=",
+ /* 249 */ "eidlist_opt ::=",
+ /* 250 */ "eidlist_opt ::= LP eidlist RP",
+ /* 251 */ "eidlist ::= eidlist COMMA nm collate sortorder",
+ /* 252 */ "eidlist ::= nm collate sortorder",
+ /* 253 */ "collate ::=",
+ /* 254 */ "collate ::= COLLATE ID|STRING",
+ /* 255 */ "cmd ::= DROP INDEX ifexists fullname",
+ /* 256 */ "cmd ::= VACUUM vinto",
+ /* 257 */ "cmd ::= VACUUM nm vinto",
+ /* 258 */ "vinto ::= INTO expr",
+ /* 259 */ "vinto ::=",
+ /* 260 */ "cmd ::= PRAGMA nm dbnm",
+ /* 261 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
+ /* 262 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
+ /* 263 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
+ /* 264 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
+ /* 265 */ "plus_num ::= PLUS INTEGER|FLOAT",
+ /* 266 */ "minus_num ::= MINUS INTEGER|FLOAT",
+ /* 267 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
+ /* 268 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
+ /* 269 */ "trigger_time ::= BEFORE|AFTER",
+ /* 270 */ "trigger_time ::= INSTEAD OF",
+ /* 271 */ "trigger_time ::=",
+ /* 272 */ "trigger_event ::= DELETE|INSERT",
+ /* 273 */ "trigger_event ::= UPDATE",
+ /* 274 */ "trigger_event ::= UPDATE OF idlist",
+ /* 275 */ "when_clause ::=",
+ /* 276 */ "when_clause ::= WHEN expr",
+ /* 277 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
+ /* 278 */ "trigger_cmd_list ::= trigger_cmd SEMI",
+ /* 279 */ "trnm ::= nm DOT nm",
+ /* 280 */ "tridxby ::= INDEXED BY nm",
+ /* 281 */ "tridxby ::= NOT INDEXED",
+ /* 282 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt",
+ /* 283 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt",
+ /* 284 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt",
+ /* 285 */ "trigger_cmd ::= scanpt select scanpt",
+ /* 286 */ "expr ::= RAISE LP IGNORE RP",
+ /* 287 */ "expr ::= RAISE LP raisetype COMMA nm RP",
+ /* 288 */ "raisetype ::= ROLLBACK",
+ /* 289 */ "raisetype ::= ABORT",
+ /* 290 */ "raisetype ::= FAIL",
+ /* 291 */ "cmd ::= DROP TRIGGER ifexists fullname",
+ /* 292 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
+ /* 293 */ "cmd ::= DETACH database_kw_opt expr",
+ /* 294 */ "key_opt ::=",
+ /* 295 */ "key_opt ::= KEY expr",
+ /* 296 */ "cmd ::= REINDEX",
+ /* 297 */ "cmd ::= REINDEX nm dbnm",
+ /* 298 */ "cmd ::= ANALYZE",
+ /* 299 */ "cmd ::= ANALYZE nm dbnm",
+ /* 300 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 301 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist",
+ /* 302 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm",
+ /* 303 */ "add_column_fullname ::= fullname",
+ /* 304 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm",
+ /* 305 */ "cmd ::= ALTER TABLE fullname ALTER COLUMNKW columnname TO columnname carglist",
+ /* 306 */ "cmd ::= create_vtab",
+ /* 307 */ "cmd ::= create_vtab LP vtabarglist RP",
+ /* 308 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm",
+ /* 309 */ "vtabarg ::=",
+ /* 310 */ "vtabargtoken ::= ANY",
+ /* 311 */ "vtabargtoken ::= lp anylist RP",
+ /* 312 */ "lp ::= LP",
+ /* 313 */ "with ::= WITH wqlist",
+ /* 314 */ "with ::= WITH RECURSIVE wqlist",
+ /* 315 */ "wqas ::= AS",
+ /* 316 */ "wqas ::= AS MATERIALIZED",
+ /* 317 */ "wqas ::= AS NOT MATERIALIZED",
+ /* 318 */ "wqitem ::= withnm eidlist_opt wqas LP select RP",
+ /* 319 */ "withnm ::= nm",
+ /* 320 */ "wqlist ::= wqitem",
+ /* 321 */ "wqlist ::= wqlist COMMA wqitem",
+ /* 322 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn",
+ /* 323 */ "windowdefn ::= nm AS LP window RP",
+ /* 324 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt",
+ /* 325 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt",
+ /* 326 */ "window ::= ORDER BY sortlist frame_opt",
+ /* 327 */ "window ::= nm ORDER BY sortlist frame_opt",
+ /* 328 */ "window ::= nm frame_opt",
+ /* 329 */ "frame_opt ::=",
+ /* 330 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt",
+ /* 331 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt",
+ /* 332 */ "range_or_rows ::= RANGE|ROWS|GROUPS",
+ /* 333 */ "frame_bound_s ::= frame_bound",
+ /* 334 */ "frame_bound_s ::= UNBOUNDED PRECEDING",
+ /* 335 */ "frame_bound_e ::= frame_bound",
+ /* 336 */ "frame_bound_e ::= UNBOUNDED FOLLOWING",
+ /* 337 */ "frame_bound ::= expr PRECEDING|FOLLOWING",
+ /* 338 */ "frame_bound ::= CURRENT ROW",
+ /* 339 */ "frame_exclude_opt ::=",
+ /* 340 */ "frame_exclude_opt ::= EXCLUDE frame_exclude",
+ /* 341 */ "frame_exclude ::= NO OTHERS",
+ /* 342 */ "frame_exclude ::= CURRENT ROW",
+ /* 343 */ "frame_exclude ::= GROUP|TIES",
+ /* 344 */ "window_clause ::= WINDOW windowdefn_list",
+ /* 345 */ "filter_over ::= filter_clause over_clause",
+ /* 346 */ "filter_over ::= over_clause",
+ /* 347 */ "filter_over ::= filter_clause",
+ /* 348 */ "over_clause ::= OVER LP window RP",
+ /* 349 */ "over_clause ::= OVER nm",
+ /* 350 */ "filter_clause ::= FILTER LP WHERE expr RP",
+ /* 351 */ "term ::= QNUMBER",
+ /* 352 */ "input ::= cmdlist",
+ /* 353 */ "cmdlist ::= cmdlist ecmd",
+ /* 354 */ "cmdlist ::= ecmd",
+ /* 355 */ "ecmd ::= SEMI",
+ /* 356 */ "ecmd ::= cmdx SEMI",
+ /* 357 */ "ecmd ::= explain cmdx SEMI",
+ /* 358 */ "trans_opt ::=",
+ /* 359 */ "trans_opt ::= TRANSACTION",
+ /* 360 */ "trans_opt ::= TRANSACTION nm",
+ /* 361 */ "savepoint_opt ::= SAVEPOINT",
+ /* 362 */ "savepoint_opt ::=",
+ /* 363 */ "cmd ::= create_table create_table_args",
+ /* 364 */ "table_option_set ::= table_option",
+ /* 365 */ "columnlist ::= columnlist COMMA columnname carglist",
+ /* 366 */ "columnlist ::= columnname carglist",
+ /* 367 */ "nm ::= ID|INDEXED|JOIN_KW",
+ /* 368 */ "nm ::= STRING",
+ /* 369 */ "typetoken ::= typename",
+ /* 370 */ "typename ::= ID|STRING",
+ /* 371 */ "signed ::= plus_num",
+ /* 372 */ "signed ::= minus_num",
+ /* 373 */ "carglist ::= carglist ccons",
+ /* 374 */ "carglist ::=",
+ /* 375 */ "ccons ::= NULL onconf",
+ /* 376 */ "ccons ::= GENERATED ALWAYS AS generated",
+ /* 377 */ "ccons ::= AS generated",
+ /* 378 */ "conslist_opt ::= COMMA conslist",
+ /* 379 */ "conslist ::= conslist tconscomma tcons",
+ /* 380 */ "conslist ::= tcons",
+ /* 381 */ "tconscomma ::=",
+ /* 382 */ "defer_subclause_opt ::= defer_subclause",
+ /* 383 */ "resolvetype ::= raisetype",
+ /* 384 */ "selectnowith ::= oneselect",
+ /* 385 */ "oneselect ::= values",
+ /* 386 */ "sclp ::= selcollist COMMA",
+ /* 387 */ "as ::= ID|STRING",
+ /* 388 */ "indexed_opt ::= indexed_by",
+ /* 389 */ "returning ::=",
+ /* 390 */ "expr ::= term",
+ /* 391 */ "likeop ::= LIKE_KW|MATCH",
+ /* 392 */ "case_operand ::= expr",
+ /* 393 */ "exprlist ::= nexprlist",
+ /* 394 */ "nmnum ::= plus_num",
+ /* 395 */ "nmnum ::= nm",
+ /* 396 */ "nmnum ::= ON",
+ /* 397 */ "nmnum ::= DELETE",
+ /* 398 */ "nmnum ::= DEFAULT",
+ /* 399 */ "plus_num ::= INTEGER|FLOAT",
+ /* 400 */ "foreach_clause ::=",
+ /* 401 */ "foreach_clause ::= FOR EACH ROW",
+ /* 402 */ "trnm ::= nm",
+ /* 403 */ "tridxby ::=",
+ /* 404 */ "database_kw_opt ::= DATABASE",
+ /* 405 */ "database_kw_opt ::=",
+ /* 406 */ "kwcolumn_opt ::=",
+ /* 407 */ "kwcolumn_opt ::= COLUMNKW",
+ /* 408 */ "vtabarglist ::= vtabarg",
+ /* 409 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
+ /* 410 */ "vtabarg ::= vtabarg vtabargtoken",
+ /* 411 */ "anylist ::=",
+ /* 412 */ "anylist ::= anylist LP anylist RP",
+ /* 413 */ "anylist ::= anylist ANY",
+ /* 414 */ "with ::=",
+ /* 415 */ "windowdefn_list ::= windowdefn",
+ /* 416 */ "window ::= frame_opt",
};
#endif /* NDEBUG */
-#if YYSTACKDEPTH<=0
+#if YYGROWABLESTACK
/*
** Try to increase the size of the parser stack. Return the number
** of errors. Return 0 on success.
*/
static int yyGrowStack(yyParser *p){
+ int oldSize = 1 + (int)(p->yystackEnd - p->yystack);
int newSize;
int idx;
yyStackEntry *pNew;
- newSize = p->yystksz*2 + 100;
- idx = p->yytos ? (int)(p->yytos - p->yystack) : 0;
- if( p->yystack==&p->yystk0 ){
- pNew = malloc(newSize*sizeof(pNew[0]));
- if( pNew ) pNew[0] = p->yystk0;
+ newSize = oldSize*2 + 100;
+ idx = (int)(p->yytos - p->yystack);
+ if( p->yystack==p->yystk0 ){
+ pNew = YYREALLOC(0, newSize*sizeof(pNew[0]));
+ if( pNew==0 ) return 1;
+ memcpy(pNew, p->yystack, oldSize*sizeof(pNew[0]));
}else{
- pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
+ pNew = YYREALLOC(p->yystack, newSize*sizeof(pNew[0]));
+ if( pNew==0 ) return 1;
}
- if( pNew ){
- p->yystack = pNew;
- p->yytos = &p->yystack[idx];
+ p->yystack = pNew;
+ p->yytos = &p->yystack[idx];
#ifndef NDEBUG
- if( yyTraceFILE ){
- fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n",
- yyTracePrompt, p->yystksz, newSize);
- }
-#endif
- p->yystksz = newSize;
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n",
+ yyTracePrompt, oldSize, newSize);
}
- return pNew==0;
+#endif
+ p->yystackEnd = &p->yystack[newSize-1];
+ return 0;
}
+#endif /* YYGROWABLESTACK */
+
+#if !YYGROWABLESTACK
+/* For builds that do no have a growable stack, yyGrowStack always
+** returns an error.
+*/
+# define yyGrowStack(X) 1
#endif
/* Datatype of the argument to the memory allocated passed as the
@@ -175893,24 +177491,14 @@ SQLITE_PRIVATE void sqlite3ParserInit(void *yypRawParser sqlite3ParserCTX_PDECL)
#ifdef YYTRACKMAXSTACKDEPTH
yypParser->yyhwm = 0;
#endif
-#if YYSTACKDEPTH<=0
- yypParser->yytos = NULL;
- yypParser->yystack = NULL;
- yypParser->yystksz = 0;
- if( yyGrowStack(yypParser) ){
- yypParser->yystack = &yypParser->yystk0;
- yypParser->yystksz = 1;
- }
-#endif
+ yypParser->yystack = yypParser->yystk0;
+ yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1];
#ifndef YYNOERRORRECOVERY
yypParser->yyerrcnt = -1;
#endif
yypParser->yytos = yypParser->yystack;
yypParser->yystack[0].stateno = 0;
yypParser->yystack[0].major = 0;
-#if YYSTACKDEPTH>0
- yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1];
-#endif
}
#ifndef sqlite3Parser_ENGINEALWAYSONSTACK
@@ -175964,97 +177552,98 @@ static void yy_destructor(
** inside the C code.
*/
/********* Begin destructor definitions ***************************************/
- case 207: /* select */
- case 242: /* selectnowith */
- case 243: /* oneselect */
- case 255: /* values */
+ case 208: /* select */
+ case 243: /* selectnowith */
+ case 244: /* oneselect */
+ case 256: /* values */
+ case 258: /* mvalues */
{
-sqlite3SelectDelete(pParse->db, (yypminor->yy637));
+sqlite3SelectDelete(pParse->db, (yypminor->yy599));
}
break;
- case 219: /* term */
- case 220: /* expr */
- case 249: /* where_opt */
- case 251: /* having_opt */
- case 270: /* where_opt_ret */
- case 281: /* case_operand */
- case 283: /* case_else */
- case 287: /* vinto */
- case 294: /* when_clause */
- case 299: /* key_opt */
- case 315: /* filter_clause */
+ case 220: /* term */
+ case 221: /* expr */
+ case 250: /* where_opt */
+ case 252: /* having_opt */
+ case 272: /* where_opt_ret */
+ case 283: /* case_operand */
+ case 285: /* case_else */
+ case 289: /* vinto */
+ case 296: /* when_clause */
+ case 301: /* key_opt */
+ case 318: /* filter_clause */
{
-sqlite3ExprDelete(pParse->db, (yypminor->yy590));
+sqlite3ExprDelete(pParse->db, (yypminor->yy66));
}
break;
- case 224: /* eidlist_opt */
- case 234: /* sortlist */
- case 235: /* eidlist */
- case 247: /* selcollist */
- case 250: /* groupby_opt */
- case 252: /* orderby_opt */
- case 256: /* nexprlist */
- case 257: /* sclp */
- case 264: /* exprlist */
- case 271: /* setlist */
- case 280: /* paren_exprlist */
- case 282: /* case_exprlist */
- case 314: /* part_opt */
+ case 225: /* eidlist_opt */
+ case 235: /* sortlist */
+ case 236: /* eidlist */
+ case 248: /* selcollist */
+ case 251: /* groupby_opt */
+ case 253: /* orderby_opt */
+ case 257: /* nexprlist */
+ case 259: /* sclp */
+ case 266: /* exprlist */
+ case 273: /* setlist */
+ case 282: /* paren_exprlist */
+ case 284: /* case_exprlist */
+ case 317: /* part_opt */
{
-sqlite3ExprListDelete(pParse->db, (yypminor->yy402));
+sqlite3ExprListDelete(pParse->db, (yypminor->yy70));
}
break;
- case 241: /* fullname */
- case 248: /* from */
- case 259: /* seltablist */
- case 260: /* stl_prefix */
- case 265: /* xfullname */
+ case 242: /* fullname */
+ case 249: /* from */
+ case 261: /* seltablist */
+ case 262: /* stl_prefix */
+ case 267: /* xfullname */
{
-sqlite3SrcListDelete(pParse->db, (yypminor->yy563));
+sqlite3SrcListDelete(pParse->db, (yypminor->yy595));
}
break;
- case 244: /* wqlist */
+ case 245: /* wqlist */
{
-sqlite3WithDelete(pParse->db, (yypminor->yy125));
+sqlite3WithDelete(pParse->db, (yypminor->yy523));
}
break;
- case 254: /* window_clause */
- case 310: /* windowdefn_list */
+ case 255: /* window_clause */
+ case 313: /* windowdefn_list */
{
-sqlite3WindowListDelete(pParse->db, (yypminor->yy483));
+sqlite3WindowListDelete(pParse->db, (yypminor->yy255));
}
break;
- case 266: /* idlist */
- case 273: /* idlist_opt */
+ case 268: /* idlist */
+ case 275: /* idlist_opt */
{
-sqlite3IdListDelete(pParse->db, (yypminor->yy204));
+sqlite3IdListDelete(pParse->db, (yypminor->yy332));
}
break;
- case 276: /* filter_over */
- case 311: /* windowdefn */
- case 312: /* window */
- case 313: /* frame_opt */
- case 316: /* over_clause */
+ case 278: /* filter_over */
+ case 314: /* windowdefn */
+ case 315: /* window */
+ case 316: /* frame_opt */
+ case 319: /* over_clause */
{
-sqlite3WindowDelete(pParse->db, (yypminor->yy483));
+sqlite3WindowDelete(pParse->db, (yypminor->yy255));
}
break;
- case 290: /* trigger_cmd_list */
- case 295: /* trigger_cmd */
+ case 292: /* trigger_cmd_list */
+ case 297: /* trigger_cmd */
{
-sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy319));
+sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy243));
}
break;
- case 292: /* trigger_event */
+ case 294: /* trigger_event */
{
-sqlite3IdListDelete(pParse->db, (yypminor->yy28).b);
+sqlite3IdListDelete(pParse->db, (yypminor->yy158).b);
}
break;
- case 318: /* frame_bound */
- case 319: /* frame_bound_s */
- case 320: /* frame_bound_e */
+ case 321: /* frame_bound */
+ case 322: /* frame_bound_s */
+ case 323: /* frame_bound_e */
{
-sqlite3ExprDelete(pParse->db, (yypminor->yy205).pExpr);
+sqlite3ExprDelete(pParse->db, (yypminor->yy417).pExpr);
}
break;
/********* End destructor definitions *****************************************/
@@ -176088,9 +177677,26 @@ static void yy_pop_parser_stack(yyParser *pParser){
*/
SQLITE_PRIVATE void sqlite3ParserFinalize(void *p){
yyParser *pParser = (yyParser*)p;
- while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser);
-#if YYSTACKDEPTH<=0
- if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack);
+
+ /* In-lined version of calling yy_pop_parser_stack() for each
+ ** element left in the stack */
+ yyStackEntry *yytos = pParser->yytos;
+ while( yytos>pParser->yystack ){
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE,"%sPopping %s\n",
+ yyTracePrompt,
+ yyTokenName[yytos->major]);
+ }
+#endif
+ if( yytos->major>=YY_MIN_DSTRCTR ){
+ yy_destructor(pParser, yytos->major, &yytos->minor);
+ }
+ yytos--;
+ }
+
+#if YYGROWABLESTACK
+ if( pParser->yystack!=pParser->yystk0 ) YYFREE(pParser->yystack);
#endif
}
@@ -176273,7 +177879,7 @@ static void yyStackOverflow(yyParser *yypParser){
** stack every overflows */
/******** Begin %stack_overflow code ******************************************/
- sqlite3ErrorMsg(pParse, "parser stack overflow");
+ sqlite3OomFault(pParse->db);
/******** End %stack_overflow code ********************************************/
sqlite3ParserARG_STORE /* Suppress warning about unused %extra_argument var */
sqlite3ParserCTX_STORE
@@ -176317,25 +177923,19 @@ static void yy_shift(
assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) );
}
#endif
-#if YYSTACKDEPTH>0
- if( yypParser->yytos>yypParser->yystackEnd ){
- yypParser->yytos--;
- yyStackOverflow(yypParser);
- return;
- }
-#else
- if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){
+ yytos = yypParser->yytos;
+ if( yytos>yypParser->yystackEnd ){
if( yyGrowStack(yypParser) ){
yypParser->yytos--;
yyStackOverflow(yypParser);
return;
}
+ yytos = yypParser->yytos;
+ assert( yytos <= yypParser->yystackEnd );
}
-#endif
if( yyNewState > YY_MAX_SHIFT ){
yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE;
}
- yytos = yypParser->yytos;
yytos->stateno = yyNewState;
yytos->major = yyMajor;
yytos->minor.yy0 = yyMinor;
@@ -176345,419 +177945,423 @@ static void yy_shift(
/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
** of that rule */
static const YYCODETYPE yyRuleInfoLhs[] = {
- 192, /* (0) explain ::= EXPLAIN */
- 192, /* (1) explain ::= EXPLAIN QUERY PLAN */
- 191, /* (2) cmdx ::= cmd */
- 193, /* (3) cmd ::= BEGIN transtype trans_opt */
- 194, /* (4) transtype ::= */
- 194, /* (5) transtype ::= DEFERRED */
- 194, /* (6) transtype ::= IMMEDIATE */
- 194, /* (7) transtype ::= EXCLUSIVE */
- 194, /* (8) transtype ::= READONLY */
- 193, /* (9) cmd ::= COMMIT|END trans_opt */
- 193, /* (10) cmd ::= ROLLBACK trans_opt */
- 193, /* (11) cmd ::= SAVEPOINT nm */
- 193, /* (12) cmd ::= RELEASE savepoint_opt nm */
- 193, /* (13) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
- 198, /* (14) create_table ::= createkw temp TABLE ifnotexists nm dbnm */
- 200, /* (15) createkw ::= CREATE */
- 202, /* (16) ifnotexists ::= */
- 202, /* (17) ifnotexists ::= IF NOT EXISTS */
- 201, /* (18) temp ::= TEMP */
- 201, /* (19) temp ::= */
- 199, /* (20) create_table_args ::= LP columnlist conslist_opt RP table_option_set */
- 199, /* (21) create_table_args ::= AS select */
- 206, /* (22) table_option_set ::= */
- 206, /* (23) table_option_set ::= table_option_set COMMA table_option */
- 208, /* (24) table_option ::= WITHOUT nm */
- 208, /* (25) table_option ::= RANDOM nm */
- 208, /* (26) table_option ::= nm */
- 209, /* (27) columnname ::= nm typetoken */
- 211, /* (28) typetoken ::= */
- 211, /* (29) typetoken ::= typename LP signed RP */
- 211, /* (30) typetoken ::= typename LP signed COMMA signed RP */
- 212, /* (31) typename ::= typename ID|STRING */
- 216, /* (32) scanpt ::= */
- 217, /* (33) scantok ::= */
- 218, /* (34) ccons ::= CONSTRAINT nm */
- 218, /* (35) ccons ::= DEFAULT scantok term */
- 218, /* (36) ccons ::= DEFAULT LP expr RP */
- 218, /* (37) ccons ::= DEFAULT PLUS scantok term */
- 218, /* (38) ccons ::= DEFAULT MINUS scantok term */
- 218, /* (39) ccons ::= DEFAULT scantok ID|INDEXED */
- 218, /* (40) ccons ::= NOT NULL onconf */
- 218, /* (41) ccons ::= PRIMARY KEY sortorder onconf autoinc */
- 218, /* (42) ccons ::= UNIQUE onconf */
- 218, /* (43) ccons ::= CHECK LP expr RP */
- 218, /* (44) ccons ::= REFERENCES nm eidlist_opt refargs */
- 218, /* (45) ccons ::= defer_subclause */
- 218, /* (46) ccons ::= COLLATE ID|STRING */
- 227, /* (47) generated ::= LP expr RP */
- 227, /* (48) generated ::= LP expr RP ID */
- 223, /* (49) autoinc ::= */
- 223, /* (50) autoinc ::= AUTOINCR */
- 225, /* (51) refargs ::= */
- 225, /* (52) refargs ::= refargs refarg */
- 228, /* (53) refarg ::= MATCH nm */
- 228, /* (54) refarg ::= ON INSERT refact */
- 228, /* (55) refarg ::= ON DELETE refact */
- 228, /* (56) refarg ::= ON UPDATE refact */
- 229, /* (57) refact ::= SET NULL */
- 229, /* (58) refact ::= SET DEFAULT */
- 229, /* (59) refact ::= CASCADE */
- 229, /* (60) refact ::= RESTRICT */
- 229, /* (61) refact ::= NO ACTION */
- 226, /* (62) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
- 226, /* (63) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
- 230, /* (64) init_deferred_pred_opt ::= */
- 230, /* (65) init_deferred_pred_opt ::= INITIALLY DEFERRED */
- 230, /* (66) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
- 205, /* (67) conslist_opt ::= */
- 232, /* (68) tconscomma ::= COMMA */
- 233, /* (69) tcons ::= CONSTRAINT nm */
- 233, /* (70) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
- 233, /* (71) tcons ::= UNIQUE LP sortlist RP onconf */
- 233, /* (72) tcons ::= CHECK LP expr RP onconf */
- 233, /* (73) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
- 236, /* (74) defer_subclause_opt ::= */
- 221, /* (75) onconf ::= */
- 221, /* (76) onconf ::= ON CONFLICT resolvetype */
- 237, /* (77) orconf ::= */
- 237, /* (78) orconf ::= OR resolvetype */
- 238, /* (79) resolvetype ::= IGNORE */
- 238, /* (80) resolvetype ::= REPLACE */
- 193, /* (81) cmd ::= DROP TABLE ifexists fullname */
- 240, /* (82) ifexists ::= IF EXISTS */
- 240, /* (83) ifexists ::= */
- 193, /* (84) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
- 193, /* (85) cmd ::= DROP VIEW ifexists fullname */
- 193, /* (86) cmd ::= createkw FUNCTION ifnotexists nm LANGUAGE nm AS STRING */
- 193, /* (87) cmd ::= createkw FUNCTION ifnotexists nm LANGUAGE nm AS BLOB */
- 193, /* (88) cmd ::= DROP FUNCTION ifexists nm */
- 193, /* (89) cmd ::= select */
- 207, /* (90) select ::= WITH wqlist selectnowith */
- 207, /* (91) select ::= WITH RECURSIVE wqlist selectnowith */
- 207, /* (92) select ::= selectnowith */
- 242, /* (93) selectnowith ::= selectnowith multiselect_op oneselect */
- 245, /* (94) multiselect_op ::= UNION */
- 245, /* (95) multiselect_op ::= UNION ALL */
- 245, /* (96) multiselect_op ::= EXCEPT|INTERSECT */
- 243, /* (97) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
- 243, /* (98) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
- 255, /* (99) values ::= VALUES LP nexprlist RP */
- 255, /* (100) values ::= values COMMA LP nexprlist RP */
- 246, /* (101) distinct ::= DISTINCT */
- 246, /* (102) distinct ::= ALL */
- 246, /* (103) distinct ::= */
- 257, /* (104) sclp ::= */
- 247, /* (105) selcollist ::= sclp scanpt expr scanpt as */
- 247, /* (106) selcollist ::= sclp scanpt STAR */
- 247, /* (107) selcollist ::= sclp scanpt nm DOT STAR */
- 258, /* (108) as ::= AS nm */
- 258, /* (109) as ::= */
- 248, /* (110) from ::= */
- 248, /* (111) from ::= FROM seltablist */
- 260, /* (112) stl_prefix ::= seltablist joinop */
- 260, /* (113) stl_prefix ::= */
- 259, /* (114) seltablist ::= stl_prefix nm dbnm as on_using */
- 259, /* (115) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
- 259, /* (116) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
- 259, /* (117) seltablist ::= stl_prefix LP select RP as on_using */
- 259, /* (118) seltablist ::= stl_prefix LP seltablist RP as on_using */
- 203, /* (119) dbnm ::= */
- 203, /* (120) dbnm ::= DOT nm */
- 241, /* (121) fullname ::= nm */
- 241, /* (122) fullname ::= nm DOT nm */
- 265, /* (123) xfullname ::= nm */
- 265, /* (124) xfullname ::= nm DOT nm */
- 265, /* (125) xfullname ::= nm DOT nm AS nm */
- 265, /* (126) xfullname ::= nm AS nm */
- 261, /* (127) joinop ::= COMMA|JOIN */
- 261, /* (128) joinop ::= JOIN_KW JOIN */
- 261, /* (129) joinop ::= JOIN_KW nm JOIN */
- 261, /* (130) joinop ::= JOIN_KW nm nm JOIN */
- 262, /* (131) on_using ::= ON expr */
- 262, /* (132) on_using ::= USING LP idlist RP */
- 262, /* (133) on_using ::= */
- 267, /* (134) indexed_opt ::= */
- 263, /* (135) indexed_by ::= INDEXED BY nm */
- 263, /* (136) indexed_by ::= NOT INDEXED */
- 252, /* (137) orderby_opt ::= */
- 252, /* (138) orderby_opt ::= ORDER BY sortlist */
- 234, /* (139) sortlist ::= sortlist COMMA expr sortorder nulls */
- 234, /* (140) sortlist ::= expr sortorder nulls */
- 222, /* (141) sortorder ::= ASC */
- 222, /* (142) sortorder ::= DESC */
- 222, /* (143) sortorder ::= */
- 268, /* (144) nulls ::= NULLS FIRST */
- 268, /* (145) nulls ::= NULLS LAST */
- 268, /* (146) nulls ::= */
- 250, /* (147) groupby_opt ::= */
- 250, /* (148) groupby_opt ::= GROUP BY nexprlist */
- 251, /* (149) having_opt ::= */
- 251, /* (150) having_opt ::= HAVING expr */
- 253, /* (151) limit_opt ::= */
- 253, /* (152) limit_opt ::= LIMIT expr */
- 253, /* (153) limit_opt ::= LIMIT expr OFFSET expr */
- 253, /* (154) limit_opt ::= LIMIT expr COMMA expr */
- 193, /* (155) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
- 249, /* (156) where_opt ::= */
- 249, /* (157) where_opt ::= WHERE expr */
- 270, /* (158) where_opt_ret ::= */
- 270, /* (159) where_opt_ret ::= WHERE expr */
- 270, /* (160) where_opt_ret ::= RETURNING selcollist */
- 270, /* (161) where_opt_ret ::= WHERE expr RETURNING selcollist */
- 193, /* (162) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
- 271, /* (163) setlist ::= setlist COMMA nm EQ expr */
- 271, /* (164) setlist ::= setlist COMMA LP idlist RP EQ expr */
- 271, /* (165) setlist ::= nm EQ expr */
- 271, /* (166) setlist ::= LP idlist RP EQ expr */
- 193, /* (167) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
- 193, /* (168) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
- 274, /* (169) upsert ::= */
- 274, /* (170) upsert ::= RETURNING selcollist */
- 274, /* (171) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
- 274, /* (172) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
- 274, /* (173) upsert ::= ON CONFLICT DO NOTHING returning */
- 274, /* (174) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
- 275, /* (175) returning ::= RETURNING selcollist */
- 272, /* (176) insert_cmd ::= INSERT orconf */
- 272, /* (177) insert_cmd ::= REPLACE */
- 273, /* (178) idlist_opt ::= */
- 273, /* (179) idlist_opt ::= LP idlist RP */
- 266, /* (180) idlist ::= idlist COMMA nm */
- 266, /* (181) idlist ::= nm */
- 220, /* (182) expr ::= LP expr RP */
- 220, /* (183) expr ::= ID|INDEXED|JOIN_KW */
- 220, /* (184) expr ::= nm DOT nm */
- 220, /* (185) expr ::= nm DOT nm DOT nm */
- 219, /* (186) term ::= NULL|FLOAT|BLOB */
- 219, /* (187) term ::= STRING */
- 219, /* (188) term ::= INTEGER */
- 220, /* (189) expr ::= VARIABLE */
- 220, /* (190) expr ::= expr COLLATE ID|STRING */
- 220, /* (191) expr ::= CAST LP expr AS typetoken RP */
- 220, /* (192) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
- 220, /* (193) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
- 220, /* (194) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
- 220, /* (195) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
- 220, /* (196) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
- 220, /* (197) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
- 219, /* (198) term ::= CTIME_KW */
- 220, /* (199) expr ::= LP nexprlist COMMA expr RP */
- 220, /* (200) expr ::= expr AND expr */
- 220, /* (201) expr ::= expr OR expr */
- 220, /* (202) expr ::= expr LT|GT|GE|LE expr */
- 220, /* (203) expr ::= expr EQ|NE expr */
- 220, /* (204) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
- 220, /* (205) expr ::= expr PLUS|MINUS expr */
- 220, /* (206) expr ::= expr STAR|SLASH|REM expr */
- 220, /* (207) expr ::= expr CONCAT expr */
- 277, /* (208) likeop ::= NOT LIKE_KW|MATCH */
- 220, /* (209) expr ::= expr likeop expr */
- 220, /* (210) expr ::= expr likeop expr ESCAPE expr */
- 220, /* (211) expr ::= expr ISNULL|NOTNULL */
- 220, /* (212) expr ::= expr NOT NULL */
- 220, /* (213) expr ::= expr IS expr */
- 220, /* (214) expr ::= expr IS NOT expr */
- 220, /* (215) expr ::= expr IS NOT DISTINCT FROM expr */
- 220, /* (216) expr ::= expr IS DISTINCT FROM expr */
- 220, /* (217) expr ::= NOT expr */
- 220, /* (218) expr ::= BITNOT expr */
- 220, /* (219) expr ::= PLUS|MINUS expr */
- 220, /* (220) expr ::= expr PTR expr */
- 278, /* (221) between_op ::= BETWEEN */
- 278, /* (222) between_op ::= NOT BETWEEN */
- 220, /* (223) expr ::= expr between_op expr AND expr */
- 279, /* (224) in_op ::= IN */
- 279, /* (225) in_op ::= NOT IN */
- 220, /* (226) expr ::= expr in_op LP exprlist RP */
- 220, /* (227) expr ::= LP select RP */
- 220, /* (228) expr ::= expr in_op LP select RP */
- 220, /* (229) expr ::= expr in_op nm dbnm paren_exprlist */
- 220, /* (230) expr ::= EXISTS LP select RP */
- 220, /* (231) expr ::= CASE case_operand case_exprlist case_else END */
- 282, /* (232) case_exprlist ::= case_exprlist WHEN expr THEN expr */
- 282, /* (233) case_exprlist ::= WHEN expr THEN expr */
- 283, /* (234) case_else ::= ELSE expr */
- 283, /* (235) case_else ::= */
- 281, /* (236) case_operand ::= */
- 264, /* (237) exprlist ::= */
- 256, /* (238) nexprlist ::= nexprlist COMMA expr */
- 256, /* (239) nexprlist ::= expr */
- 280, /* (240) paren_exprlist ::= */
- 280, /* (241) paren_exprlist ::= LP exprlist RP */
- 193, /* (242) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm indextype ON nm LP sortlist RP where_opt */
- 284, /* (243) uniqueflag ::= UNIQUE */
- 284, /* (244) uniqueflag ::= */
- 285, /* (245) indextype ::= USING idlist */
- 285, /* (246) indextype ::= */
- 224, /* (247) eidlist_opt ::= */
- 224, /* (248) eidlist_opt ::= LP eidlist RP */
- 235, /* (249) eidlist ::= eidlist COMMA nm collate sortorder */
- 235, /* (250) eidlist ::= nm collate sortorder */
- 286, /* (251) collate ::= */
- 286, /* (252) collate ::= COLLATE ID|STRING */
- 193, /* (253) cmd ::= DROP INDEX ifexists fullname */
- 193, /* (254) cmd ::= VACUUM vinto */
- 193, /* (255) cmd ::= VACUUM nm vinto */
- 287, /* (256) vinto ::= INTO expr */
- 287, /* (257) vinto ::= */
- 193, /* (258) cmd ::= PRAGMA nm dbnm */
- 193, /* (259) cmd ::= PRAGMA nm dbnm EQ nmnum */
- 193, /* (260) cmd ::= PRAGMA nm dbnm LP nmnum RP */
- 193, /* (261) cmd ::= PRAGMA nm dbnm EQ minus_num */
- 193, /* (262) cmd ::= PRAGMA nm dbnm LP minus_num RP */
- 214, /* (263) plus_num ::= PLUS INTEGER|FLOAT */
- 215, /* (264) minus_num ::= MINUS INTEGER|FLOAT */
- 193, /* (265) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
- 289, /* (266) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
- 291, /* (267) trigger_time ::= BEFORE|AFTER */
- 291, /* (268) trigger_time ::= INSTEAD OF */
- 291, /* (269) trigger_time ::= */
- 292, /* (270) trigger_event ::= DELETE|INSERT */
- 292, /* (271) trigger_event ::= UPDATE */
- 292, /* (272) trigger_event ::= UPDATE OF idlist */
- 294, /* (273) when_clause ::= */
- 294, /* (274) when_clause ::= WHEN expr */
- 290, /* (275) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
- 290, /* (276) trigger_cmd_list ::= trigger_cmd SEMI */
- 296, /* (277) trnm ::= nm DOT nm */
- 297, /* (278) tridxby ::= INDEXED BY nm */
- 297, /* (279) tridxby ::= NOT INDEXED */
- 295, /* (280) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
- 295, /* (281) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
- 295, /* (282) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
- 295, /* (283) trigger_cmd ::= scanpt select scanpt */
- 220, /* (284) expr ::= RAISE LP IGNORE RP */
- 220, /* (285) expr ::= RAISE LP raisetype COMMA nm RP */
- 239, /* (286) raisetype ::= ROLLBACK */
- 239, /* (287) raisetype ::= ABORT */
- 239, /* (288) raisetype ::= FAIL */
- 193, /* (289) cmd ::= DROP TRIGGER ifexists fullname */
- 193, /* (290) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
- 193, /* (291) cmd ::= DETACH database_kw_opt expr */
- 299, /* (292) key_opt ::= */
- 299, /* (293) key_opt ::= KEY expr */
- 193, /* (294) cmd ::= REINDEX */
- 193, /* (295) cmd ::= REINDEX nm dbnm */
- 193, /* (296) cmd ::= ANALYZE */
- 193, /* (297) cmd ::= ANALYZE nm dbnm */
- 193, /* (298) cmd ::= ALTER TABLE fullname RENAME TO nm */
- 193, /* (299) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
- 193, /* (300) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
- 300, /* (301) add_column_fullname ::= fullname */
- 193, /* (302) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
- 193, /* (303) cmd ::= ALTER TABLE fullname ALTER COLUMNKW columnname TO columnname carglist */
- 193, /* (304) cmd ::= create_vtab */
- 193, /* (305) cmd ::= create_vtab LP vtabarglist RP */
- 302, /* (306) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
- 304, /* (307) vtabarg ::= */
- 305, /* (308) vtabargtoken ::= ANY */
- 305, /* (309) vtabargtoken ::= lp anylist RP */
- 306, /* (310) lp ::= LP */
- 269, /* (311) with ::= WITH wqlist */
- 269, /* (312) with ::= WITH RECURSIVE wqlist */
- 309, /* (313) wqas ::= AS */
- 309, /* (314) wqas ::= AS MATERIALIZED */
- 309, /* (315) wqas ::= AS NOT MATERIALIZED */
- 308, /* (316) wqitem ::= nm eidlist_opt wqas LP select RP */
- 244, /* (317) wqlist ::= wqitem */
- 244, /* (318) wqlist ::= wqlist COMMA wqitem */
- 310, /* (319) windowdefn_list ::= windowdefn_list COMMA windowdefn */
- 311, /* (320) windowdefn ::= nm AS LP window RP */
- 312, /* (321) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
- 312, /* (322) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
- 312, /* (323) window ::= ORDER BY sortlist frame_opt */
- 312, /* (324) window ::= nm ORDER BY sortlist frame_opt */
- 312, /* (325) window ::= nm frame_opt */
- 313, /* (326) frame_opt ::= */
- 313, /* (327) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
- 313, /* (328) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
- 317, /* (329) range_or_rows ::= RANGE|ROWS|GROUPS */
- 319, /* (330) frame_bound_s ::= frame_bound */
- 319, /* (331) frame_bound_s ::= UNBOUNDED PRECEDING */
- 320, /* (332) frame_bound_e ::= frame_bound */
- 320, /* (333) frame_bound_e ::= UNBOUNDED FOLLOWING */
- 318, /* (334) frame_bound ::= expr PRECEDING|FOLLOWING */
- 318, /* (335) frame_bound ::= CURRENT ROW */
- 321, /* (336) frame_exclude_opt ::= */
- 321, /* (337) frame_exclude_opt ::= EXCLUDE frame_exclude */
- 322, /* (338) frame_exclude ::= NO OTHERS */
- 322, /* (339) frame_exclude ::= CURRENT ROW */
- 322, /* (340) frame_exclude ::= GROUP|TIES */
- 254, /* (341) window_clause ::= WINDOW windowdefn_list */
- 276, /* (342) filter_over ::= filter_clause over_clause */
- 276, /* (343) filter_over ::= over_clause */
- 276, /* (344) filter_over ::= filter_clause */
- 316, /* (345) over_clause ::= OVER LP window RP */
- 316, /* (346) over_clause ::= OVER nm */
- 315, /* (347) filter_clause ::= FILTER LP WHERE expr RP */
- 188, /* (348) input ::= cmdlist */
- 189, /* (349) cmdlist ::= cmdlist ecmd */
- 189, /* (350) cmdlist ::= ecmd */
- 190, /* (351) ecmd ::= SEMI */
- 190, /* (352) ecmd ::= cmdx SEMI */
- 190, /* (353) ecmd ::= explain cmdx SEMI */
- 195, /* (354) trans_opt ::= */
- 195, /* (355) trans_opt ::= TRANSACTION */
- 195, /* (356) trans_opt ::= TRANSACTION nm */
- 197, /* (357) savepoint_opt ::= SAVEPOINT */
- 197, /* (358) savepoint_opt ::= */
- 193, /* (359) cmd ::= create_table create_table_args */
- 206, /* (360) table_option_set ::= table_option */
- 204, /* (361) columnlist ::= columnlist COMMA columnname carglist */
- 204, /* (362) columnlist ::= columnname carglist */
- 196, /* (363) nm ::= ID|INDEXED|JOIN_KW */
- 196, /* (364) nm ::= STRING */
- 211, /* (365) typetoken ::= typename */
- 212, /* (366) typename ::= ID|STRING */
- 213, /* (367) signed ::= plus_num */
- 213, /* (368) signed ::= minus_num */
- 210, /* (369) carglist ::= carglist ccons */
- 210, /* (370) carglist ::= */
- 218, /* (371) ccons ::= NULL onconf */
- 218, /* (372) ccons ::= GENERATED ALWAYS AS generated */
- 218, /* (373) ccons ::= AS generated */
- 205, /* (374) conslist_opt ::= COMMA conslist */
- 231, /* (375) conslist ::= conslist tconscomma tcons */
- 231, /* (376) conslist ::= tcons */
- 232, /* (377) tconscomma ::= */
- 236, /* (378) defer_subclause_opt ::= defer_subclause */
- 238, /* (379) resolvetype ::= raisetype */
- 242, /* (380) selectnowith ::= oneselect */
- 243, /* (381) oneselect ::= values */
- 257, /* (382) sclp ::= selcollist COMMA */
- 258, /* (383) as ::= ID|STRING */
- 267, /* (384) indexed_opt ::= indexed_by */
- 275, /* (385) returning ::= */
- 220, /* (386) expr ::= term */
- 277, /* (387) likeop ::= LIKE_KW|MATCH */
- 281, /* (388) case_operand ::= expr */
- 264, /* (389) exprlist ::= nexprlist */
- 288, /* (390) nmnum ::= plus_num */
- 288, /* (391) nmnum ::= nm */
- 288, /* (392) nmnum ::= ON */
- 288, /* (393) nmnum ::= DELETE */
- 288, /* (394) nmnum ::= DEFAULT */
- 214, /* (395) plus_num ::= INTEGER|FLOAT */
- 293, /* (396) foreach_clause ::= */
- 293, /* (397) foreach_clause ::= FOR EACH ROW */
- 296, /* (398) trnm ::= nm */
- 297, /* (399) tridxby ::= */
- 298, /* (400) database_kw_opt ::= DATABASE */
- 298, /* (401) database_kw_opt ::= */
- 301, /* (402) kwcolumn_opt ::= */
- 301, /* (403) kwcolumn_opt ::= COLUMNKW */
- 303, /* (404) vtabarglist ::= vtabarg */
- 303, /* (405) vtabarglist ::= vtabarglist COMMA vtabarg */
- 304, /* (406) vtabarg ::= vtabarg vtabargtoken */
- 307, /* (407) anylist ::= */
- 307, /* (408) anylist ::= anylist LP anylist RP */
- 307, /* (409) anylist ::= anylist ANY */
- 269, /* (410) with ::= */
- 310, /* (411) windowdefn_list ::= windowdefn */
- 312, /* (412) window ::= frame_opt */
+ 193, /* (0) explain ::= EXPLAIN */
+ 193, /* (1) explain ::= EXPLAIN QUERY PLAN */
+ 192, /* (2) cmdx ::= cmd */
+ 194, /* (3) cmd ::= BEGIN transtype trans_opt */
+ 195, /* (4) transtype ::= */
+ 195, /* (5) transtype ::= DEFERRED */
+ 195, /* (6) transtype ::= IMMEDIATE */
+ 195, /* (7) transtype ::= EXCLUSIVE */
+ 195, /* (8) transtype ::= READONLY */
+ 194, /* (9) cmd ::= COMMIT|END trans_opt */
+ 194, /* (10) cmd ::= ROLLBACK trans_opt */
+ 194, /* (11) cmd ::= SAVEPOINT nm */
+ 194, /* (12) cmd ::= RELEASE savepoint_opt nm */
+ 194, /* (13) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
+ 199, /* (14) create_table ::= createkw temp TABLE ifnotexists nm dbnm */
+ 201, /* (15) createkw ::= CREATE */
+ 203, /* (16) ifnotexists ::= */
+ 203, /* (17) ifnotexists ::= IF NOT EXISTS */
+ 202, /* (18) temp ::= TEMP */
+ 202, /* (19) temp ::= */
+ 200, /* (20) create_table_args ::= LP columnlist conslist_opt RP table_option_set */
+ 200, /* (21) create_table_args ::= AS select */
+ 207, /* (22) table_option_set ::= */
+ 207, /* (23) table_option_set ::= table_option_set COMMA table_option */
+ 209, /* (24) table_option ::= WITHOUT nm */
+ 209, /* (25) table_option ::= RANDOM nm */
+ 209, /* (26) table_option ::= nm */
+ 210, /* (27) columnname ::= nm typetoken */
+ 212, /* (28) typetoken ::= */
+ 212, /* (29) typetoken ::= typename LP signed RP */
+ 212, /* (30) typetoken ::= typename LP signed COMMA signed RP */
+ 213, /* (31) typename ::= typename ID|STRING */
+ 217, /* (32) scanpt ::= */
+ 218, /* (33) scantok ::= */
+ 219, /* (34) ccons ::= CONSTRAINT nm */
+ 219, /* (35) ccons ::= DEFAULT scantok term */
+ 219, /* (36) ccons ::= DEFAULT LP expr RP */
+ 219, /* (37) ccons ::= DEFAULT PLUS scantok term */
+ 219, /* (38) ccons ::= DEFAULT MINUS scantok term */
+ 219, /* (39) ccons ::= DEFAULT scantok ID|INDEXED */
+ 219, /* (40) ccons ::= NOT NULL onconf */
+ 219, /* (41) ccons ::= PRIMARY KEY sortorder onconf autoinc */
+ 219, /* (42) ccons ::= UNIQUE onconf */
+ 219, /* (43) ccons ::= CHECK LP expr RP */
+ 219, /* (44) ccons ::= REFERENCES nm eidlist_opt refargs */
+ 219, /* (45) ccons ::= defer_subclause */
+ 219, /* (46) ccons ::= COLLATE ID|STRING */
+ 228, /* (47) generated ::= LP expr RP */
+ 228, /* (48) generated ::= LP expr RP ID */
+ 224, /* (49) autoinc ::= */
+ 224, /* (50) autoinc ::= AUTOINCR */
+ 226, /* (51) refargs ::= */
+ 226, /* (52) refargs ::= refargs refarg */
+ 229, /* (53) refarg ::= MATCH nm */
+ 229, /* (54) refarg ::= ON INSERT refact */
+ 229, /* (55) refarg ::= ON DELETE refact */
+ 229, /* (56) refarg ::= ON UPDATE refact */
+ 230, /* (57) refact ::= SET NULL */
+ 230, /* (58) refact ::= SET DEFAULT */
+ 230, /* (59) refact ::= CASCADE */
+ 230, /* (60) refact ::= RESTRICT */
+ 230, /* (61) refact ::= NO ACTION */
+ 227, /* (62) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
+ 227, /* (63) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
+ 231, /* (64) init_deferred_pred_opt ::= */
+ 231, /* (65) init_deferred_pred_opt ::= INITIALLY DEFERRED */
+ 231, /* (66) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
+ 206, /* (67) conslist_opt ::= */
+ 233, /* (68) tconscomma ::= COMMA */
+ 234, /* (69) tcons ::= CONSTRAINT nm */
+ 234, /* (70) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
+ 234, /* (71) tcons ::= UNIQUE LP sortlist RP onconf */
+ 234, /* (72) tcons ::= CHECK LP expr RP onconf */
+ 234, /* (73) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
+ 237, /* (74) defer_subclause_opt ::= */
+ 222, /* (75) onconf ::= */
+ 222, /* (76) onconf ::= ON CONFLICT resolvetype */
+ 238, /* (77) orconf ::= */
+ 238, /* (78) orconf ::= OR resolvetype */
+ 239, /* (79) resolvetype ::= IGNORE */
+ 239, /* (80) resolvetype ::= REPLACE */
+ 194, /* (81) cmd ::= DROP TABLE ifexists fullname */
+ 241, /* (82) ifexists ::= IF EXISTS */
+ 241, /* (83) ifexists ::= */
+ 194, /* (84) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
+ 194, /* (85) cmd ::= DROP VIEW ifexists fullname */
+ 194, /* (86) cmd ::= createkw FUNCTION ifnotexists nm LANGUAGE nm AS STRING */
+ 194, /* (87) cmd ::= createkw FUNCTION ifnotexists nm LANGUAGE nm AS BLOB */
+ 194, /* (88) cmd ::= DROP FUNCTION ifexists nm */
+ 194, /* (89) cmd ::= select */
+ 208, /* (90) select ::= WITH wqlist selectnowith */
+ 208, /* (91) select ::= WITH RECURSIVE wqlist selectnowith */
+ 208, /* (92) select ::= selectnowith */
+ 243, /* (93) selectnowith ::= selectnowith multiselect_op oneselect */
+ 246, /* (94) multiselect_op ::= UNION */
+ 246, /* (95) multiselect_op ::= UNION ALL */
+ 246, /* (96) multiselect_op ::= EXCEPT|INTERSECT */
+ 244, /* (97) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
+ 244, /* (98) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
+ 256, /* (99) values ::= VALUES LP nexprlist RP */
+ 244, /* (100) oneselect ::= mvalues */
+ 258, /* (101) mvalues ::= values COMMA LP nexprlist RP */
+ 258, /* (102) mvalues ::= mvalues COMMA LP nexprlist RP */
+ 247, /* (103) distinct ::= DISTINCT */
+ 247, /* (104) distinct ::= ALL */
+ 247, /* (105) distinct ::= */
+ 259, /* (106) sclp ::= */
+ 248, /* (107) selcollist ::= sclp scanpt expr scanpt as */
+ 248, /* (108) selcollist ::= sclp scanpt STAR */
+ 248, /* (109) selcollist ::= sclp scanpt nm DOT STAR */
+ 260, /* (110) as ::= AS nm */
+ 260, /* (111) as ::= */
+ 249, /* (112) from ::= */
+ 249, /* (113) from ::= FROM seltablist */
+ 262, /* (114) stl_prefix ::= seltablist joinop */
+ 262, /* (115) stl_prefix ::= */
+ 261, /* (116) seltablist ::= stl_prefix nm dbnm as on_using */
+ 261, /* (117) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
+ 261, /* (118) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
+ 261, /* (119) seltablist ::= stl_prefix LP select RP as on_using */
+ 261, /* (120) seltablist ::= stl_prefix LP seltablist RP as on_using */
+ 204, /* (121) dbnm ::= */
+ 204, /* (122) dbnm ::= DOT nm */
+ 242, /* (123) fullname ::= nm */
+ 242, /* (124) fullname ::= nm DOT nm */
+ 267, /* (125) xfullname ::= nm */
+ 267, /* (126) xfullname ::= nm DOT nm */
+ 267, /* (127) xfullname ::= nm DOT nm AS nm */
+ 267, /* (128) xfullname ::= nm AS nm */
+ 263, /* (129) joinop ::= COMMA|JOIN */
+ 263, /* (130) joinop ::= JOIN_KW JOIN */
+ 263, /* (131) joinop ::= JOIN_KW nm JOIN */
+ 263, /* (132) joinop ::= JOIN_KW nm nm JOIN */
+ 264, /* (133) on_using ::= ON expr */
+ 264, /* (134) on_using ::= USING LP idlist RP */
+ 264, /* (135) on_using ::= */
+ 269, /* (136) indexed_opt ::= */
+ 265, /* (137) indexed_by ::= INDEXED BY nm */
+ 265, /* (138) indexed_by ::= NOT INDEXED */
+ 253, /* (139) orderby_opt ::= */
+ 253, /* (140) orderby_opt ::= ORDER BY sortlist */
+ 235, /* (141) sortlist ::= sortlist COMMA expr sortorder nulls */
+ 235, /* (142) sortlist ::= expr sortorder nulls */
+ 223, /* (143) sortorder ::= ASC */
+ 223, /* (144) sortorder ::= DESC */
+ 223, /* (145) sortorder ::= */
+ 270, /* (146) nulls ::= NULLS FIRST */
+ 270, /* (147) nulls ::= NULLS LAST */
+ 270, /* (148) nulls ::= */
+ 251, /* (149) groupby_opt ::= */
+ 251, /* (150) groupby_opt ::= GROUP BY nexprlist */
+ 252, /* (151) having_opt ::= */
+ 252, /* (152) having_opt ::= HAVING expr */
+ 254, /* (153) limit_opt ::= */
+ 254, /* (154) limit_opt ::= LIMIT expr */
+ 254, /* (155) limit_opt ::= LIMIT expr OFFSET expr */
+ 254, /* (156) limit_opt ::= LIMIT expr COMMA expr */
+ 194, /* (157) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
+ 250, /* (158) where_opt ::= */
+ 250, /* (159) where_opt ::= WHERE expr */
+ 272, /* (160) where_opt_ret ::= */
+ 272, /* (161) where_opt_ret ::= WHERE expr */
+ 272, /* (162) where_opt_ret ::= RETURNING selcollist */
+ 272, /* (163) where_opt_ret ::= WHERE expr RETURNING selcollist */
+ 194, /* (164) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
+ 273, /* (165) setlist ::= setlist COMMA nm EQ expr */
+ 273, /* (166) setlist ::= setlist COMMA LP idlist RP EQ expr */
+ 273, /* (167) setlist ::= nm EQ expr */
+ 273, /* (168) setlist ::= LP idlist RP EQ expr */
+ 194, /* (169) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ 194, /* (170) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
+ 276, /* (171) upsert ::= */
+ 276, /* (172) upsert ::= RETURNING selcollist */
+ 276, /* (173) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
+ 276, /* (174) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
+ 276, /* (175) upsert ::= ON CONFLICT DO NOTHING returning */
+ 276, /* (176) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
+ 277, /* (177) returning ::= RETURNING selcollist */
+ 274, /* (178) insert_cmd ::= INSERT orconf */
+ 274, /* (179) insert_cmd ::= REPLACE */
+ 275, /* (180) idlist_opt ::= */
+ 275, /* (181) idlist_opt ::= LP idlist RP */
+ 268, /* (182) idlist ::= idlist COMMA nm */
+ 268, /* (183) idlist ::= nm */
+ 221, /* (184) expr ::= LP expr RP */
+ 221, /* (185) expr ::= ID|INDEXED|JOIN_KW */
+ 221, /* (186) expr ::= nm DOT nm */
+ 221, /* (187) expr ::= nm DOT nm DOT nm */
+ 220, /* (188) term ::= NULL|FLOAT|BLOB */
+ 220, /* (189) term ::= STRING */
+ 220, /* (190) term ::= INTEGER */
+ 221, /* (191) expr ::= VARIABLE */
+ 221, /* (192) expr ::= expr COLLATE ID|STRING */
+ 221, /* (193) expr ::= CAST LP expr AS typetoken RP */
+ 221, /* (194) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
+ 221, /* (195) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
+ 221, /* (196) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
+ 221, /* (197) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
+ 221, /* (198) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
+ 221, /* (199) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
+ 220, /* (200) term ::= CTIME_KW */
+ 221, /* (201) expr ::= LP nexprlist COMMA expr RP */
+ 221, /* (202) expr ::= expr AND expr */
+ 221, /* (203) expr ::= expr OR expr */
+ 221, /* (204) expr ::= expr LT|GT|GE|LE expr */
+ 221, /* (205) expr ::= expr EQ|NE expr */
+ 221, /* (206) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
+ 221, /* (207) expr ::= expr PLUS|MINUS expr */
+ 221, /* (208) expr ::= expr STAR|SLASH|REM expr */
+ 221, /* (209) expr ::= expr CONCAT expr */
+ 279, /* (210) likeop ::= NOT LIKE_KW|MATCH */
+ 221, /* (211) expr ::= expr likeop expr */
+ 221, /* (212) expr ::= expr likeop expr ESCAPE expr */
+ 221, /* (213) expr ::= expr ISNULL|NOTNULL */
+ 221, /* (214) expr ::= expr NOT NULL */
+ 221, /* (215) expr ::= expr IS expr */
+ 221, /* (216) expr ::= expr IS NOT expr */
+ 221, /* (217) expr ::= expr IS NOT DISTINCT FROM expr */
+ 221, /* (218) expr ::= expr IS DISTINCT FROM expr */
+ 221, /* (219) expr ::= NOT expr */
+ 221, /* (220) expr ::= BITNOT expr */
+ 221, /* (221) expr ::= PLUS|MINUS expr */
+ 221, /* (222) expr ::= expr PTR expr */
+ 280, /* (223) between_op ::= BETWEEN */
+ 280, /* (224) between_op ::= NOT BETWEEN */
+ 221, /* (225) expr ::= expr between_op expr AND expr */
+ 281, /* (226) in_op ::= IN */
+ 281, /* (227) in_op ::= NOT IN */
+ 221, /* (228) expr ::= expr in_op LP exprlist RP */
+ 221, /* (229) expr ::= LP select RP */
+ 221, /* (230) expr ::= expr in_op LP select RP */
+ 221, /* (231) expr ::= expr in_op nm dbnm paren_exprlist */
+ 221, /* (232) expr ::= EXISTS LP select RP */
+ 221, /* (233) expr ::= CASE case_operand case_exprlist case_else END */
+ 284, /* (234) case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ 284, /* (235) case_exprlist ::= WHEN expr THEN expr */
+ 285, /* (236) case_else ::= ELSE expr */
+ 285, /* (237) case_else ::= */
+ 283, /* (238) case_operand ::= */
+ 266, /* (239) exprlist ::= */
+ 257, /* (240) nexprlist ::= nexprlist COMMA expr */
+ 257, /* (241) nexprlist ::= expr */
+ 282, /* (242) paren_exprlist ::= */
+ 282, /* (243) paren_exprlist ::= LP exprlist RP */
+ 194, /* (244) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm indextype ON nm LP sortlist RP where_opt */
+ 286, /* (245) uniqueflag ::= UNIQUE */
+ 286, /* (246) uniqueflag ::= */
+ 287, /* (247) indextype ::= USING idlist */
+ 287, /* (248) indextype ::= */
+ 225, /* (249) eidlist_opt ::= */
+ 225, /* (250) eidlist_opt ::= LP eidlist RP */
+ 236, /* (251) eidlist ::= eidlist COMMA nm collate sortorder */
+ 236, /* (252) eidlist ::= nm collate sortorder */
+ 288, /* (253) collate ::= */
+ 288, /* (254) collate ::= COLLATE ID|STRING */
+ 194, /* (255) cmd ::= DROP INDEX ifexists fullname */
+ 194, /* (256) cmd ::= VACUUM vinto */
+ 194, /* (257) cmd ::= VACUUM nm vinto */
+ 289, /* (258) vinto ::= INTO expr */
+ 289, /* (259) vinto ::= */
+ 194, /* (260) cmd ::= PRAGMA nm dbnm */
+ 194, /* (261) cmd ::= PRAGMA nm dbnm EQ nmnum */
+ 194, /* (262) cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ 194, /* (263) cmd ::= PRAGMA nm dbnm EQ minus_num */
+ 194, /* (264) cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ 215, /* (265) plus_num ::= PLUS INTEGER|FLOAT */
+ 216, /* (266) minus_num ::= MINUS INTEGER|FLOAT */
+ 194, /* (267) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ 291, /* (268) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ 293, /* (269) trigger_time ::= BEFORE|AFTER */
+ 293, /* (270) trigger_time ::= INSTEAD OF */
+ 293, /* (271) trigger_time ::= */
+ 294, /* (272) trigger_event ::= DELETE|INSERT */
+ 294, /* (273) trigger_event ::= UPDATE */
+ 294, /* (274) trigger_event ::= UPDATE OF idlist */
+ 296, /* (275) when_clause ::= */
+ 296, /* (276) when_clause ::= WHEN expr */
+ 292, /* (277) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ 292, /* (278) trigger_cmd_list ::= trigger_cmd SEMI */
+ 298, /* (279) trnm ::= nm DOT nm */
+ 299, /* (280) tridxby ::= INDEXED BY nm */
+ 299, /* (281) tridxby ::= NOT INDEXED */
+ 297, /* (282) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
+ 297, /* (283) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ 297, /* (284) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+ 297, /* (285) trigger_cmd ::= scanpt select scanpt */
+ 221, /* (286) expr ::= RAISE LP IGNORE RP */
+ 221, /* (287) expr ::= RAISE LP raisetype COMMA nm RP */
+ 240, /* (288) raisetype ::= ROLLBACK */
+ 240, /* (289) raisetype ::= ABORT */
+ 240, /* (290) raisetype ::= FAIL */
+ 194, /* (291) cmd ::= DROP TRIGGER ifexists fullname */
+ 194, /* (292) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ 194, /* (293) cmd ::= DETACH database_kw_opt expr */
+ 301, /* (294) key_opt ::= */
+ 301, /* (295) key_opt ::= KEY expr */
+ 194, /* (296) cmd ::= REINDEX */
+ 194, /* (297) cmd ::= REINDEX nm dbnm */
+ 194, /* (298) cmd ::= ANALYZE */
+ 194, /* (299) cmd ::= ANALYZE nm dbnm */
+ 194, /* (300) cmd ::= ALTER TABLE fullname RENAME TO nm */
+ 194, /* (301) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ 194, /* (302) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
+ 302, /* (303) add_column_fullname ::= fullname */
+ 194, /* (304) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ 194, /* (305) cmd ::= ALTER TABLE fullname ALTER COLUMNKW columnname TO columnname carglist */
+ 194, /* (306) cmd ::= create_vtab */
+ 194, /* (307) cmd ::= create_vtab LP vtabarglist RP */
+ 304, /* (308) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ 306, /* (309) vtabarg ::= */
+ 307, /* (310) vtabargtoken ::= ANY */
+ 307, /* (311) vtabargtoken ::= lp anylist RP */
+ 308, /* (312) lp ::= LP */
+ 271, /* (313) with ::= WITH wqlist */
+ 271, /* (314) with ::= WITH RECURSIVE wqlist */
+ 311, /* (315) wqas ::= AS */
+ 311, /* (316) wqas ::= AS MATERIALIZED */
+ 311, /* (317) wqas ::= AS NOT MATERIALIZED */
+ 310, /* (318) wqitem ::= withnm eidlist_opt wqas LP select RP */
+ 312, /* (319) withnm ::= nm */
+ 245, /* (320) wqlist ::= wqitem */
+ 245, /* (321) wqlist ::= wqlist COMMA wqitem */
+ 313, /* (322) windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ 314, /* (323) windowdefn ::= nm AS LP window RP */
+ 315, /* (324) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ 315, /* (325) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ 315, /* (326) window ::= ORDER BY sortlist frame_opt */
+ 315, /* (327) window ::= nm ORDER BY sortlist frame_opt */
+ 315, /* (328) window ::= nm frame_opt */
+ 316, /* (329) frame_opt ::= */
+ 316, /* (330) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ 316, /* (331) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ 320, /* (332) range_or_rows ::= RANGE|ROWS|GROUPS */
+ 322, /* (333) frame_bound_s ::= frame_bound */
+ 322, /* (334) frame_bound_s ::= UNBOUNDED PRECEDING */
+ 323, /* (335) frame_bound_e ::= frame_bound */
+ 323, /* (336) frame_bound_e ::= UNBOUNDED FOLLOWING */
+ 321, /* (337) frame_bound ::= expr PRECEDING|FOLLOWING */
+ 321, /* (338) frame_bound ::= CURRENT ROW */
+ 324, /* (339) frame_exclude_opt ::= */
+ 324, /* (340) frame_exclude_opt ::= EXCLUDE frame_exclude */
+ 325, /* (341) frame_exclude ::= NO OTHERS */
+ 325, /* (342) frame_exclude ::= CURRENT ROW */
+ 325, /* (343) frame_exclude ::= GROUP|TIES */
+ 255, /* (344) window_clause ::= WINDOW windowdefn_list */
+ 278, /* (345) filter_over ::= filter_clause over_clause */
+ 278, /* (346) filter_over ::= over_clause */
+ 278, /* (347) filter_over ::= filter_clause */
+ 319, /* (348) over_clause ::= OVER LP window RP */
+ 319, /* (349) over_clause ::= OVER nm */
+ 318, /* (350) filter_clause ::= FILTER LP WHERE expr RP */
+ 220, /* (351) term ::= QNUMBER */
+ 189, /* (352) input ::= cmdlist */
+ 190, /* (353) cmdlist ::= cmdlist ecmd */
+ 190, /* (354) cmdlist ::= ecmd */
+ 191, /* (355) ecmd ::= SEMI */
+ 191, /* (356) ecmd ::= cmdx SEMI */
+ 191, /* (357) ecmd ::= explain cmdx SEMI */
+ 196, /* (358) trans_opt ::= */
+ 196, /* (359) trans_opt ::= TRANSACTION */
+ 196, /* (360) trans_opt ::= TRANSACTION nm */
+ 198, /* (361) savepoint_opt ::= SAVEPOINT */
+ 198, /* (362) savepoint_opt ::= */
+ 194, /* (363) cmd ::= create_table create_table_args */
+ 207, /* (364) table_option_set ::= table_option */
+ 205, /* (365) columnlist ::= columnlist COMMA columnname carglist */
+ 205, /* (366) columnlist ::= columnname carglist */
+ 197, /* (367) nm ::= ID|INDEXED|JOIN_KW */
+ 197, /* (368) nm ::= STRING */
+ 212, /* (369) typetoken ::= typename */
+ 213, /* (370) typename ::= ID|STRING */
+ 214, /* (371) signed ::= plus_num */
+ 214, /* (372) signed ::= minus_num */
+ 211, /* (373) carglist ::= carglist ccons */
+ 211, /* (374) carglist ::= */
+ 219, /* (375) ccons ::= NULL onconf */
+ 219, /* (376) ccons ::= GENERATED ALWAYS AS generated */
+ 219, /* (377) ccons ::= AS generated */
+ 206, /* (378) conslist_opt ::= COMMA conslist */
+ 232, /* (379) conslist ::= conslist tconscomma tcons */
+ 232, /* (380) conslist ::= tcons */
+ 233, /* (381) tconscomma ::= */
+ 237, /* (382) defer_subclause_opt ::= defer_subclause */
+ 239, /* (383) resolvetype ::= raisetype */
+ 243, /* (384) selectnowith ::= oneselect */
+ 244, /* (385) oneselect ::= values */
+ 259, /* (386) sclp ::= selcollist COMMA */
+ 260, /* (387) as ::= ID|STRING */
+ 269, /* (388) indexed_opt ::= indexed_by */
+ 277, /* (389) returning ::= */
+ 221, /* (390) expr ::= term */
+ 279, /* (391) likeop ::= LIKE_KW|MATCH */
+ 283, /* (392) case_operand ::= expr */
+ 266, /* (393) exprlist ::= nexprlist */
+ 290, /* (394) nmnum ::= plus_num */
+ 290, /* (395) nmnum ::= nm */
+ 290, /* (396) nmnum ::= ON */
+ 290, /* (397) nmnum ::= DELETE */
+ 290, /* (398) nmnum ::= DEFAULT */
+ 215, /* (399) plus_num ::= INTEGER|FLOAT */
+ 295, /* (400) foreach_clause ::= */
+ 295, /* (401) foreach_clause ::= FOR EACH ROW */
+ 298, /* (402) trnm ::= nm */
+ 299, /* (403) tridxby ::= */
+ 300, /* (404) database_kw_opt ::= DATABASE */
+ 300, /* (405) database_kw_opt ::= */
+ 303, /* (406) kwcolumn_opt ::= */
+ 303, /* (407) kwcolumn_opt ::= COLUMNKW */
+ 305, /* (408) vtabarglist ::= vtabarg */
+ 305, /* (409) vtabarglist ::= vtabarglist COMMA vtabarg */
+ 306, /* (410) vtabarg ::= vtabarg vtabargtoken */
+ 309, /* (411) anylist ::= */
+ 309, /* (412) anylist ::= anylist LP anylist RP */
+ 309, /* (413) anylist ::= anylist ANY */
+ 271, /* (414) with ::= */
+ 313, /* (415) windowdefn_list ::= windowdefn */
+ 315, /* (416) window ::= frame_opt */
};
/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
@@ -176863,319 +178467,323 @@ static const signed char yyRuleInfoNRhs[] = {
-9, /* (97) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
-10, /* (98) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
-4, /* (99) values ::= VALUES LP nexprlist RP */
- -5, /* (100) values ::= values COMMA LP nexprlist RP */
- -1, /* (101) distinct ::= DISTINCT */
- -1, /* (102) distinct ::= ALL */
- 0, /* (103) distinct ::= */
- 0, /* (104) sclp ::= */
- -5, /* (105) selcollist ::= sclp scanpt expr scanpt as */
- -3, /* (106) selcollist ::= sclp scanpt STAR */
- -5, /* (107) selcollist ::= sclp scanpt nm DOT STAR */
- -2, /* (108) as ::= AS nm */
- 0, /* (109) as ::= */
- 0, /* (110) from ::= */
- -2, /* (111) from ::= FROM seltablist */
- -2, /* (112) stl_prefix ::= seltablist joinop */
- 0, /* (113) stl_prefix ::= */
- -5, /* (114) seltablist ::= stl_prefix nm dbnm as on_using */
- -6, /* (115) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
- -8, /* (116) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
- -6, /* (117) seltablist ::= stl_prefix LP select RP as on_using */
- -6, /* (118) seltablist ::= stl_prefix LP seltablist RP as on_using */
- 0, /* (119) dbnm ::= */
- -2, /* (120) dbnm ::= DOT nm */
- -1, /* (121) fullname ::= nm */
- -3, /* (122) fullname ::= nm DOT nm */
- -1, /* (123) xfullname ::= nm */
- -3, /* (124) xfullname ::= nm DOT nm */
- -5, /* (125) xfullname ::= nm DOT nm AS nm */
- -3, /* (126) xfullname ::= nm AS nm */
- -1, /* (127) joinop ::= COMMA|JOIN */
- -2, /* (128) joinop ::= JOIN_KW JOIN */
- -3, /* (129) joinop ::= JOIN_KW nm JOIN */
- -4, /* (130) joinop ::= JOIN_KW nm nm JOIN */
- -2, /* (131) on_using ::= ON expr */
- -4, /* (132) on_using ::= USING LP idlist RP */
- 0, /* (133) on_using ::= */
- 0, /* (134) indexed_opt ::= */
- -3, /* (135) indexed_by ::= INDEXED BY nm */
- -2, /* (136) indexed_by ::= NOT INDEXED */
- 0, /* (137) orderby_opt ::= */
- -3, /* (138) orderby_opt ::= ORDER BY sortlist */
- -5, /* (139) sortlist ::= sortlist COMMA expr sortorder nulls */
- -3, /* (140) sortlist ::= expr sortorder nulls */
- -1, /* (141) sortorder ::= ASC */
- -1, /* (142) sortorder ::= DESC */
- 0, /* (143) sortorder ::= */
- -2, /* (144) nulls ::= NULLS FIRST */
- -2, /* (145) nulls ::= NULLS LAST */
- 0, /* (146) nulls ::= */
- 0, /* (147) groupby_opt ::= */
- -3, /* (148) groupby_opt ::= GROUP BY nexprlist */
- 0, /* (149) having_opt ::= */
- -2, /* (150) having_opt ::= HAVING expr */
- 0, /* (151) limit_opt ::= */
- -2, /* (152) limit_opt ::= LIMIT expr */
- -4, /* (153) limit_opt ::= LIMIT expr OFFSET expr */
- -4, /* (154) limit_opt ::= LIMIT expr COMMA expr */
- -6, /* (155) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
- 0, /* (156) where_opt ::= */
- -2, /* (157) where_opt ::= WHERE expr */
- 0, /* (158) where_opt_ret ::= */
- -2, /* (159) where_opt_ret ::= WHERE expr */
- -2, /* (160) where_opt_ret ::= RETURNING selcollist */
- -4, /* (161) where_opt_ret ::= WHERE expr RETURNING selcollist */
- -9, /* (162) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
- -5, /* (163) setlist ::= setlist COMMA nm EQ expr */
- -7, /* (164) setlist ::= setlist COMMA LP idlist RP EQ expr */
- -3, /* (165) setlist ::= nm EQ expr */
- -5, /* (166) setlist ::= LP idlist RP EQ expr */
- -7, /* (167) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
- -8, /* (168) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
- 0, /* (169) upsert ::= */
- -2, /* (170) upsert ::= RETURNING selcollist */
- -12, /* (171) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
- -9, /* (172) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
- -5, /* (173) upsert ::= ON CONFLICT DO NOTHING returning */
- -8, /* (174) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
- -2, /* (175) returning ::= RETURNING selcollist */
- -2, /* (176) insert_cmd ::= INSERT orconf */
- -1, /* (177) insert_cmd ::= REPLACE */
- 0, /* (178) idlist_opt ::= */
- -3, /* (179) idlist_opt ::= LP idlist RP */
- -3, /* (180) idlist ::= idlist COMMA nm */
- -1, /* (181) idlist ::= nm */
- -3, /* (182) expr ::= LP expr RP */
- -1, /* (183) expr ::= ID|INDEXED|JOIN_KW */
- -3, /* (184) expr ::= nm DOT nm */
- -5, /* (185) expr ::= nm DOT nm DOT nm */
- -1, /* (186) term ::= NULL|FLOAT|BLOB */
- -1, /* (187) term ::= STRING */
- -1, /* (188) term ::= INTEGER */
- -1, /* (189) expr ::= VARIABLE */
- -3, /* (190) expr ::= expr COLLATE ID|STRING */
- -6, /* (191) expr ::= CAST LP expr AS typetoken RP */
- -5, /* (192) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
- -8, /* (193) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
- -4, /* (194) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
- -6, /* (195) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
- -9, /* (196) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
- -5, /* (197) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
- -1, /* (198) term ::= CTIME_KW */
- -5, /* (199) expr ::= LP nexprlist COMMA expr RP */
- -3, /* (200) expr ::= expr AND expr */
- -3, /* (201) expr ::= expr OR expr */
- -3, /* (202) expr ::= expr LT|GT|GE|LE expr */
- -3, /* (203) expr ::= expr EQ|NE expr */
- -3, /* (204) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
- -3, /* (205) expr ::= expr PLUS|MINUS expr */
- -3, /* (206) expr ::= expr STAR|SLASH|REM expr */
- -3, /* (207) expr ::= expr CONCAT expr */
- -2, /* (208) likeop ::= NOT LIKE_KW|MATCH */
- -3, /* (209) expr ::= expr likeop expr */
- -5, /* (210) expr ::= expr likeop expr ESCAPE expr */
- -2, /* (211) expr ::= expr ISNULL|NOTNULL */
- -3, /* (212) expr ::= expr NOT NULL */
- -3, /* (213) expr ::= expr IS expr */
- -4, /* (214) expr ::= expr IS NOT expr */
- -6, /* (215) expr ::= expr IS NOT DISTINCT FROM expr */
- -5, /* (216) expr ::= expr IS DISTINCT FROM expr */
- -2, /* (217) expr ::= NOT expr */
- -2, /* (218) expr ::= BITNOT expr */
- -2, /* (219) expr ::= PLUS|MINUS expr */
- -3, /* (220) expr ::= expr PTR expr */
- -1, /* (221) between_op ::= BETWEEN */
- -2, /* (222) between_op ::= NOT BETWEEN */
- -5, /* (223) expr ::= expr between_op expr AND expr */
- -1, /* (224) in_op ::= IN */
- -2, /* (225) in_op ::= NOT IN */
- -5, /* (226) expr ::= expr in_op LP exprlist RP */
- -3, /* (227) expr ::= LP select RP */
- -5, /* (228) expr ::= expr in_op LP select RP */
- -5, /* (229) expr ::= expr in_op nm dbnm paren_exprlist */
- -4, /* (230) expr ::= EXISTS LP select RP */
- -5, /* (231) expr ::= CASE case_operand case_exprlist case_else END */
- -5, /* (232) case_exprlist ::= case_exprlist WHEN expr THEN expr */
- -4, /* (233) case_exprlist ::= WHEN expr THEN expr */
- -2, /* (234) case_else ::= ELSE expr */
- 0, /* (235) case_else ::= */
- 0, /* (236) case_operand ::= */
- 0, /* (237) exprlist ::= */
- -3, /* (238) nexprlist ::= nexprlist COMMA expr */
- -1, /* (239) nexprlist ::= expr */
- 0, /* (240) paren_exprlist ::= */
- -3, /* (241) paren_exprlist ::= LP exprlist RP */
- -13, /* (242) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm indextype ON nm LP sortlist RP where_opt */
- -1, /* (243) uniqueflag ::= UNIQUE */
- 0, /* (244) uniqueflag ::= */
- -2, /* (245) indextype ::= USING idlist */
- 0, /* (246) indextype ::= */
- 0, /* (247) eidlist_opt ::= */
- -3, /* (248) eidlist_opt ::= LP eidlist RP */
- -5, /* (249) eidlist ::= eidlist COMMA nm collate sortorder */
- -3, /* (250) eidlist ::= nm collate sortorder */
- 0, /* (251) collate ::= */
- -2, /* (252) collate ::= COLLATE ID|STRING */
- -4, /* (253) cmd ::= DROP INDEX ifexists fullname */
- -2, /* (254) cmd ::= VACUUM vinto */
- -3, /* (255) cmd ::= VACUUM nm vinto */
- -2, /* (256) vinto ::= INTO expr */
- 0, /* (257) vinto ::= */
- -3, /* (258) cmd ::= PRAGMA nm dbnm */
- -5, /* (259) cmd ::= PRAGMA nm dbnm EQ nmnum */
- -6, /* (260) cmd ::= PRAGMA nm dbnm LP nmnum RP */
- -5, /* (261) cmd ::= PRAGMA nm dbnm EQ minus_num */
- -6, /* (262) cmd ::= PRAGMA nm dbnm LP minus_num RP */
- -2, /* (263) plus_num ::= PLUS INTEGER|FLOAT */
- -2, /* (264) minus_num ::= MINUS INTEGER|FLOAT */
- -5, /* (265) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
- -11, /* (266) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
- -1, /* (267) trigger_time ::= BEFORE|AFTER */
- -2, /* (268) trigger_time ::= INSTEAD OF */
- 0, /* (269) trigger_time ::= */
- -1, /* (270) trigger_event ::= DELETE|INSERT */
- -1, /* (271) trigger_event ::= UPDATE */
- -3, /* (272) trigger_event ::= UPDATE OF idlist */
- 0, /* (273) when_clause ::= */
- -2, /* (274) when_clause ::= WHEN expr */
- -3, /* (275) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
- -2, /* (276) trigger_cmd_list ::= trigger_cmd SEMI */
- -3, /* (277) trnm ::= nm DOT nm */
- -3, /* (278) tridxby ::= INDEXED BY nm */
- -2, /* (279) tridxby ::= NOT INDEXED */
- -9, /* (280) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
- -8, /* (281) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
- -6, /* (282) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
- -3, /* (283) trigger_cmd ::= scanpt select scanpt */
- -4, /* (284) expr ::= RAISE LP IGNORE RP */
- -6, /* (285) expr ::= RAISE LP raisetype COMMA nm RP */
- -1, /* (286) raisetype ::= ROLLBACK */
- -1, /* (287) raisetype ::= ABORT */
- -1, /* (288) raisetype ::= FAIL */
- -4, /* (289) cmd ::= DROP TRIGGER ifexists fullname */
- -6, /* (290) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
- -3, /* (291) cmd ::= DETACH database_kw_opt expr */
- 0, /* (292) key_opt ::= */
- -2, /* (293) key_opt ::= KEY expr */
- -1, /* (294) cmd ::= REINDEX */
- -3, /* (295) cmd ::= REINDEX nm dbnm */
- -1, /* (296) cmd ::= ANALYZE */
- -3, /* (297) cmd ::= ANALYZE nm dbnm */
- -6, /* (298) cmd ::= ALTER TABLE fullname RENAME TO nm */
- -7, /* (299) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
- -6, /* (300) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
- -1, /* (301) add_column_fullname ::= fullname */
- -8, /* (302) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
- -9, /* (303) cmd ::= ALTER TABLE fullname ALTER COLUMNKW columnname TO columnname carglist */
- -1, /* (304) cmd ::= create_vtab */
- -4, /* (305) cmd ::= create_vtab LP vtabarglist RP */
- -8, /* (306) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
- 0, /* (307) vtabarg ::= */
- -1, /* (308) vtabargtoken ::= ANY */
- -3, /* (309) vtabargtoken ::= lp anylist RP */
- -1, /* (310) lp ::= LP */
- -2, /* (311) with ::= WITH wqlist */
- -3, /* (312) with ::= WITH RECURSIVE wqlist */
- -1, /* (313) wqas ::= AS */
- -2, /* (314) wqas ::= AS MATERIALIZED */
- -3, /* (315) wqas ::= AS NOT MATERIALIZED */
- -6, /* (316) wqitem ::= nm eidlist_opt wqas LP select RP */
- -1, /* (317) wqlist ::= wqitem */
- -3, /* (318) wqlist ::= wqlist COMMA wqitem */
- -3, /* (319) windowdefn_list ::= windowdefn_list COMMA windowdefn */
- -5, /* (320) windowdefn ::= nm AS LP window RP */
- -5, /* (321) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
- -6, /* (322) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
- -4, /* (323) window ::= ORDER BY sortlist frame_opt */
- -5, /* (324) window ::= nm ORDER BY sortlist frame_opt */
- -2, /* (325) window ::= nm frame_opt */
- 0, /* (326) frame_opt ::= */
- -3, /* (327) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
- -6, /* (328) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
- -1, /* (329) range_or_rows ::= RANGE|ROWS|GROUPS */
- -1, /* (330) frame_bound_s ::= frame_bound */
- -2, /* (331) frame_bound_s ::= UNBOUNDED PRECEDING */
- -1, /* (332) frame_bound_e ::= frame_bound */
- -2, /* (333) frame_bound_e ::= UNBOUNDED FOLLOWING */
- -2, /* (334) frame_bound ::= expr PRECEDING|FOLLOWING */
- -2, /* (335) frame_bound ::= CURRENT ROW */
- 0, /* (336) frame_exclude_opt ::= */
- -2, /* (337) frame_exclude_opt ::= EXCLUDE frame_exclude */
- -2, /* (338) frame_exclude ::= NO OTHERS */
- -2, /* (339) frame_exclude ::= CURRENT ROW */
- -1, /* (340) frame_exclude ::= GROUP|TIES */
- -2, /* (341) window_clause ::= WINDOW windowdefn_list */
- -2, /* (342) filter_over ::= filter_clause over_clause */
- -1, /* (343) filter_over ::= over_clause */
- -1, /* (344) filter_over ::= filter_clause */
- -4, /* (345) over_clause ::= OVER LP window RP */
- -2, /* (346) over_clause ::= OVER nm */
- -5, /* (347) filter_clause ::= FILTER LP WHERE expr RP */
- -1, /* (348) input ::= cmdlist */
- -2, /* (349) cmdlist ::= cmdlist ecmd */
- -1, /* (350) cmdlist ::= ecmd */
- -1, /* (351) ecmd ::= SEMI */
- -2, /* (352) ecmd ::= cmdx SEMI */
- -3, /* (353) ecmd ::= explain cmdx SEMI */
- 0, /* (354) trans_opt ::= */
- -1, /* (355) trans_opt ::= TRANSACTION */
- -2, /* (356) trans_opt ::= TRANSACTION nm */
- -1, /* (357) savepoint_opt ::= SAVEPOINT */
- 0, /* (358) savepoint_opt ::= */
- -2, /* (359) cmd ::= create_table create_table_args */
- -1, /* (360) table_option_set ::= table_option */
- -4, /* (361) columnlist ::= columnlist COMMA columnname carglist */
- -2, /* (362) columnlist ::= columnname carglist */
- -1, /* (363) nm ::= ID|INDEXED|JOIN_KW */
- -1, /* (364) nm ::= STRING */
- -1, /* (365) typetoken ::= typename */
- -1, /* (366) typename ::= ID|STRING */
- -1, /* (367) signed ::= plus_num */
- -1, /* (368) signed ::= minus_num */
- -2, /* (369) carglist ::= carglist ccons */
- 0, /* (370) carglist ::= */
- -2, /* (371) ccons ::= NULL onconf */
- -4, /* (372) ccons ::= GENERATED ALWAYS AS generated */
- -2, /* (373) ccons ::= AS generated */
- -2, /* (374) conslist_opt ::= COMMA conslist */
- -3, /* (375) conslist ::= conslist tconscomma tcons */
- -1, /* (376) conslist ::= tcons */
- 0, /* (377) tconscomma ::= */
- -1, /* (378) defer_subclause_opt ::= defer_subclause */
- -1, /* (379) resolvetype ::= raisetype */
- -1, /* (380) selectnowith ::= oneselect */
- -1, /* (381) oneselect ::= values */
- -2, /* (382) sclp ::= selcollist COMMA */
- -1, /* (383) as ::= ID|STRING */
- -1, /* (384) indexed_opt ::= indexed_by */
- 0, /* (385) returning ::= */
- -1, /* (386) expr ::= term */
- -1, /* (387) likeop ::= LIKE_KW|MATCH */
- -1, /* (388) case_operand ::= expr */
- -1, /* (389) exprlist ::= nexprlist */
- -1, /* (390) nmnum ::= plus_num */
- -1, /* (391) nmnum ::= nm */
- -1, /* (392) nmnum ::= ON */
- -1, /* (393) nmnum ::= DELETE */
- -1, /* (394) nmnum ::= DEFAULT */
- -1, /* (395) plus_num ::= INTEGER|FLOAT */
- 0, /* (396) foreach_clause ::= */
- -3, /* (397) foreach_clause ::= FOR EACH ROW */
- -1, /* (398) trnm ::= nm */
- 0, /* (399) tridxby ::= */
- -1, /* (400) database_kw_opt ::= DATABASE */
- 0, /* (401) database_kw_opt ::= */
- 0, /* (402) kwcolumn_opt ::= */
- -1, /* (403) kwcolumn_opt ::= COLUMNKW */
- -1, /* (404) vtabarglist ::= vtabarg */
- -3, /* (405) vtabarglist ::= vtabarglist COMMA vtabarg */
- -2, /* (406) vtabarg ::= vtabarg vtabargtoken */
- 0, /* (407) anylist ::= */
- -4, /* (408) anylist ::= anylist LP anylist RP */
- -2, /* (409) anylist ::= anylist ANY */
- 0, /* (410) with ::= */
- -1, /* (411) windowdefn_list ::= windowdefn */
- -1, /* (412) window ::= frame_opt */
+ -1, /* (100) oneselect ::= mvalues */
+ -5, /* (101) mvalues ::= values COMMA LP nexprlist RP */
+ -5, /* (102) mvalues ::= mvalues COMMA LP nexprlist RP */
+ -1, /* (103) distinct ::= DISTINCT */
+ -1, /* (104) distinct ::= ALL */
+ 0, /* (105) distinct ::= */
+ 0, /* (106) sclp ::= */
+ -5, /* (107) selcollist ::= sclp scanpt expr scanpt as */
+ -3, /* (108) selcollist ::= sclp scanpt STAR */
+ -5, /* (109) selcollist ::= sclp scanpt nm DOT STAR */
+ -2, /* (110) as ::= AS nm */
+ 0, /* (111) as ::= */
+ 0, /* (112) from ::= */
+ -2, /* (113) from ::= FROM seltablist */
+ -2, /* (114) stl_prefix ::= seltablist joinop */
+ 0, /* (115) stl_prefix ::= */
+ -5, /* (116) seltablist ::= stl_prefix nm dbnm as on_using */
+ -6, /* (117) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
+ -8, /* (118) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
+ -6, /* (119) seltablist ::= stl_prefix LP select RP as on_using */
+ -6, /* (120) seltablist ::= stl_prefix LP seltablist RP as on_using */
+ 0, /* (121) dbnm ::= */
+ -2, /* (122) dbnm ::= DOT nm */
+ -1, /* (123) fullname ::= nm */
+ -3, /* (124) fullname ::= nm DOT nm */
+ -1, /* (125) xfullname ::= nm */
+ -3, /* (126) xfullname ::= nm DOT nm */
+ -5, /* (127) xfullname ::= nm DOT nm AS nm */
+ -3, /* (128) xfullname ::= nm AS nm */
+ -1, /* (129) joinop ::= COMMA|JOIN */
+ -2, /* (130) joinop ::= JOIN_KW JOIN */
+ -3, /* (131) joinop ::= JOIN_KW nm JOIN */
+ -4, /* (132) joinop ::= JOIN_KW nm nm JOIN */
+ -2, /* (133) on_using ::= ON expr */
+ -4, /* (134) on_using ::= USING LP idlist RP */
+ 0, /* (135) on_using ::= */
+ 0, /* (136) indexed_opt ::= */
+ -3, /* (137) indexed_by ::= INDEXED BY nm */
+ -2, /* (138) indexed_by ::= NOT INDEXED */
+ 0, /* (139) orderby_opt ::= */
+ -3, /* (140) orderby_opt ::= ORDER BY sortlist */
+ -5, /* (141) sortlist ::= sortlist COMMA expr sortorder nulls */
+ -3, /* (142) sortlist ::= expr sortorder nulls */
+ -1, /* (143) sortorder ::= ASC */
+ -1, /* (144) sortorder ::= DESC */
+ 0, /* (145) sortorder ::= */
+ -2, /* (146) nulls ::= NULLS FIRST */
+ -2, /* (147) nulls ::= NULLS LAST */
+ 0, /* (148) nulls ::= */
+ 0, /* (149) groupby_opt ::= */
+ -3, /* (150) groupby_opt ::= GROUP BY nexprlist */
+ 0, /* (151) having_opt ::= */
+ -2, /* (152) having_opt ::= HAVING expr */
+ 0, /* (153) limit_opt ::= */
+ -2, /* (154) limit_opt ::= LIMIT expr */
+ -4, /* (155) limit_opt ::= LIMIT expr OFFSET expr */
+ -4, /* (156) limit_opt ::= LIMIT expr COMMA expr */
+ -6, /* (157) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
+ 0, /* (158) where_opt ::= */
+ -2, /* (159) where_opt ::= WHERE expr */
+ 0, /* (160) where_opt_ret ::= */
+ -2, /* (161) where_opt_ret ::= WHERE expr */
+ -2, /* (162) where_opt_ret ::= RETURNING selcollist */
+ -4, /* (163) where_opt_ret ::= WHERE expr RETURNING selcollist */
+ -9, /* (164) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
+ -5, /* (165) setlist ::= setlist COMMA nm EQ expr */
+ -7, /* (166) setlist ::= setlist COMMA LP idlist RP EQ expr */
+ -3, /* (167) setlist ::= nm EQ expr */
+ -5, /* (168) setlist ::= LP idlist RP EQ expr */
+ -7, /* (169) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ -8, /* (170) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
+ 0, /* (171) upsert ::= */
+ -2, /* (172) upsert ::= RETURNING selcollist */
+ -12, /* (173) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
+ -9, /* (174) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
+ -5, /* (175) upsert ::= ON CONFLICT DO NOTHING returning */
+ -8, /* (176) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
+ -2, /* (177) returning ::= RETURNING selcollist */
+ -2, /* (178) insert_cmd ::= INSERT orconf */
+ -1, /* (179) insert_cmd ::= REPLACE */
+ 0, /* (180) idlist_opt ::= */
+ -3, /* (181) idlist_opt ::= LP idlist RP */
+ -3, /* (182) idlist ::= idlist COMMA nm */
+ -1, /* (183) idlist ::= nm */
+ -3, /* (184) expr ::= LP expr RP */
+ -1, /* (185) expr ::= ID|INDEXED|JOIN_KW */
+ -3, /* (186) expr ::= nm DOT nm */
+ -5, /* (187) expr ::= nm DOT nm DOT nm */
+ -1, /* (188) term ::= NULL|FLOAT|BLOB */
+ -1, /* (189) term ::= STRING */
+ -1, /* (190) term ::= INTEGER */
+ -1, /* (191) expr ::= VARIABLE */
+ -3, /* (192) expr ::= expr COLLATE ID|STRING */
+ -6, /* (193) expr ::= CAST LP expr AS typetoken RP */
+ -5, /* (194) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
+ -8, /* (195) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
+ -4, /* (196) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
+ -6, /* (197) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
+ -9, /* (198) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
+ -5, /* (199) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
+ -1, /* (200) term ::= CTIME_KW */
+ -5, /* (201) expr ::= LP nexprlist COMMA expr RP */
+ -3, /* (202) expr ::= expr AND expr */
+ -3, /* (203) expr ::= expr OR expr */
+ -3, /* (204) expr ::= expr LT|GT|GE|LE expr */
+ -3, /* (205) expr ::= expr EQ|NE expr */
+ -3, /* (206) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
+ -3, /* (207) expr ::= expr PLUS|MINUS expr */
+ -3, /* (208) expr ::= expr STAR|SLASH|REM expr */
+ -3, /* (209) expr ::= expr CONCAT expr */
+ -2, /* (210) likeop ::= NOT LIKE_KW|MATCH */
+ -3, /* (211) expr ::= expr likeop expr */
+ -5, /* (212) expr ::= expr likeop expr ESCAPE expr */
+ -2, /* (213) expr ::= expr ISNULL|NOTNULL */
+ -3, /* (214) expr ::= expr NOT NULL */
+ -3, /* (215) expr ::= expr IS expr */
+ -4, /* (216) expr ::= expr IS NOT expr */
+ -6, /* (217) expr ::= expr IS NOT DISTINCT FROM expr */
+ -5, /* (218) expr ::= expr IS DISTINCT FROM expr */
+ -2, /* (219) expr ::= NOT expr */
+ -2, /* (220) expr ::= BITNOT expr */
+ -2, /* (221) expr ::= PLUS|MINUS expr */
+ -3, /* (222) expr ::= expr PTR expr */
+ -1, /* (223) between_op ::= BETWEEN */
+ -2, /* (224) between_op ::= NOT BETWEEN */
+ -5, /* (225) expr ::= expr between_op expr AND expr */
+ -1, /* (226) in_op ::= IN */
+ -2, /* (227) in_op ::= NOT IN */
+ -5, /* (228) expr ::= expr in_op LP exprlist RP */
+ -3, /* (229) expr ::= LP select RP */
+ -5, /* (230) expr ::= expr in_op LP select RP */
+ -5, /* (231) expr ::= expr in_op nm dbnm paren_exprlist */
+ -4, /* (232) expr ::= EXISTS LP select RP */
+ -5, /* (233) expr ::= CASE case_operand case_exprlist case_else END */
+ -5, /* (234) case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ -4, /* (235) case_exprlist ::= WHEN expr THEN expr */
+ -2, /* (236) case_else ::= ELSE expr */
+ 0, /* (237) case_else ::= */
+ 0, /* (238) case_operand ::= */
+ 0, /* (239) exprlist ::= */
+ -3, /* (240) nexprlist ::= nexprlist COMMA expr */
+ -1, /* (241) nexprlist ::= expr */
+ 0, /* (242) paren_exprlist ::= */
+ -3, /* (243) paren_exprlist ::= LP exprlist RP */
+ -13, /* (244) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm indextype ON nm LP sortlist RP where_opt */
+ -1, /* (245) uniqueflag ::= UNIQUE */
+ 0, /* (246) uniqueflag ::= */
+ -2, /* (247) indextype ::= USING idlist */
+ 0, /* (248) indextype ::= */
+ 0, /* (249) eidlist_opt ::= */
+ -3, /* (250) eidlist_opt ::= LP eidlist RP */
+ -5, /* (251) eidlist ::= eidlist COMMA nm collate sortorder */
+ -3, /* (252) eidlist ::= nm collate sortorder */
+ 0, /* (253) collate ::= */
+ -2, /* (254) collate ::= COLLATE ID|STRING */
+ -4, /* (255) cmd ::= DROP INDEX ifexists fullname */
+ -2, /* (256) cmd ::= VACUUM vinto */
+ -3, /* (257) cmd ::= VACUUM nm vinto */
+ -2, /* (258) vinto ::= INTO expr */
+ 0, /* (259) vinto ::= */
+ -3, /* (260) cmd ::= PRAGMA nm dbnm */
+ -5, /* (261) cmd ::= PRAGMA nm dbnm EQ nmnum */
+ -6, /* (262) cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ -5, /* (263) cmd ::= PRAGMA nm dbnm EQ minus_num */
+ -6, /* (264) cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ -2, /* (265) plus_num ::= PLUS INTEGER|FLOAT */
+ -2, /* (266) minus_num ::= MINUS INTEGER|FLOAT */
+ -5, /* (267) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ -11, /* (268) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ -1, /* (269) trigger_time ::= BEFORE|AFTER */
+ -2, /* (270) trigger_time ::= INSTEAD OF */
+ 0, /* (271) trigger_time ::= */
+ -1, /* (272) trigger_event ::= DELETE|INSERT */
+ -1, /* (273) trigger_event ::= UPDATE */
+ -3, /* (274) trigger_event ::= UPDATE OF idlist */
+ 0, /* (275) when_clause ::= */
+ -2, /* (276) when_clause ::= WHEN expr */
+ -3, /* (277) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ -2, /* (278) trigger_cmd_list ::= trigger_cmd SEMI */
+ -3, /* (279) trnm ::= nm DOT nm */
+ -3, /* (280) tridxby ::= INDEXED BY nm */
+ -2, /* (281) tridxby ::= NOT INDEXED */
+ -9, /* (282) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
+ -8, /* (283) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ -6, /* (284) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+ -3, /* (285) trigger_cmd ::= scanpt select scanpt */
+ -4, /* (286) expr ::= RAISE LP IGNORE RP */
+ -6, /* (287) expr ::= RAISE LP raisetype COMMA nm RP */
+ -1, /* (288) raisetype ::= ROLLBACK */
+ -1, /* (289) raisetype ::= ABORT */
+ -1, /* (290) raisetype ::= FAIL */
+ -4, /* (291) cmd ::= DROP TRIGGER ifexists fullname */
+ -6, /* (292) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ -3, /* (293) cmd ::= DETACH database_kw_opt expr */
+ 0, /* (294) key_opt ::= */
+ -2, /* (295) key_opt ::= KEY expr */
+ -1, /* (296) cmd ::= REINDEX */
+ -3, /* (297) cmd ::= REINDEX nm dbnm */
+ -1, /* (298) cmd ::= ANALYZE */
+ -3, /* (299) cmd ::= ANALYZE nm dbnm */
+ -6, /* (300) cmd ::= ALTER TABLE fullname RENAME TO nm */
+ -7, /* (301) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ -6, /* (302) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
+ -1, /* (303) add_column_fullname ::= fullname */
+ -8, /* (304) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ -9, /* (305) cmd ::= ALTER TABLE fullname ALTER COLUMNKW columnname TO columnname carglist */
+ -1, /* (306) cmd ::= create_vtab */
+ -4, /* (307) cmd ::= create_vtab LP vtabarglist RP */
+ -8, /* (308) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ 0, /* (309) vtabarg ::= */
+ -1, /* (310) vtabargtoken ::= ANY */
+ -3, /* (311) vtabargtoken ::= lp anylist RP */
+ -1, /* (312) lp ::= LP */
+ -2, /* (313) with ::= WITH wqlist */
+ -3, /* (314) with ::= WITH RECURSIVE wqlist */
+ -1, /* (315) wqas ::= AS */
+ -2, /* (316) wqas ::= AS MATERIALIZED */
+ -3, /* (317) wqas ::= AS NOT MATERIALIZED */
+ -6, /* (318) wqitem ::= withnm eidlist_opt wqas LP select RP */
+ -1, /* (319) withnm ::= nm */
+ -1, /* (320) wqlist ::= wqitem */
+ -3, /* (321) wqlist ::= wqlist COMMA wqitem */
+ -3, /* (322) windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ -5, /* (323) windowdefn ::= nm AS LP window RP */
+ -5, /* (324) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ -6, /* (325) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ -4, /* (326) window ::= ORDER BY sortlist frame_opt */
+ -5, /* (327) window ::= nm ORDER BY sortlist frame_opt */
+ -2, /* (328) window ::= nm frame_opt */
+ 0, /* (329) frame_opt ::= */
+ -3, /* (330) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ -6, /* (331) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ -1, /* (332) range_or_rows ::= RANGE|ROWS|GROUPS */
+ -1, /* (333) frame_bound_s ::= frame_bound */
+ -2, /* (334) frame_bound_s ::= UNBOUNDED PRECEDING */
+ -1, /* (335) frame_bound_e ::= frame_bound */
+ -2, /* (336) frame_bound_e ::= UNBOUNDED FOLLOWING */
+ -2, /* (337) frame_bound ::= expr PRECEDING|FOLLOWING */
+ -2, /* (338) frame_bound ::= CURRENT ROW */
+ 0, /* (339) frame_exclude_opt ::= */
+ -2, /* (340) frame_exclude_opt ::= EXCLUDE frame_exclude */
+ -2, /* (341) frame_exclude ::= NO OTHERS */
+ -2, /* (342) frame_exclude ::= CURRENT ROW */
+ -1, /* (343) frame_exclude ::= GROUP|TIES */
+ -2, /* (344) window_clause ::= WINDOW windowdefn_list */
+ -2, /* (345) filter_over ::= filter_clause over_clause */
+ -1, /* (346) filter_over ::= over_clause */
+ -1, /* (347) filter_over ::= filter_clause */
+ -4, /* (348) over_clause ::= OVER LP window RP */
+ -2, /* (349) over_clause ::= OVER nm */
+ -5, /* (350) filter_clause ::= FILTER LP WHERE expr RP */
+ -1, /* (351) term ::= QNUMBER */
+ -1, /* (352) input ::= cmdlist */
+ -2, /* (353) cmdlist ::= cmdlist ecmd */
+ -1, /* (354) cmdlist ::= ecmd */
+ -1, /* (355) ecmd ::= SEMI */
+ -2, /* (356) ecmd ::= cmdx SEMI */
+ -3, /* (357) ecmd ::= explain cmdx SEMI */
+ 0, /* (358) trans_opt ::= */
+ -1, /* (359) trans_opt ::= TRANSACTION */
+ -2, /* (360) trans_opt ::= TRANSACTION nm */
+ -1, /* (361) savepoint_opt ::= SAVEPOINT */
+ 0, /* (362) savepoint_opt ::= */
+ -2, /* (363) cmd ::= create_table create_table_args */
+ -1, /* (364) table_option_set ::= table_option */
+ -4, /* (365) columnlist ::= columnlist COMMA columnname carglist */
+ -2, /* (366) columnlist ::= columnname carglist */
+ -1, /* (367) nm ::= ID|INDEXED|JOIN_KW */
+ -1, /* (368) nm ::= STRING */
+ -1, /* (369) typetoken ::= typename */
+ -1, /* (370) typename ::= ID|STRING */
+ -1, /* (371) signed ::= plus_num */
+ -1, /* (372) signed ::= minus_num */
+ -2, /* (373) carglist ::= carglist ccons */
+ 0, /* (374) carglist ::= */
+ -2, /* (375) ccons ::= NULL onconf */
+ -4, /* (376) ccons ::= GENERATED ALWAYS AS generated */
+ -2, /* (377) ccons ::= AS generated */
+ -2, /* (378) conslist_opt ::= COMMA conslist */
+ -3, /* (379) conslist ::= conslist tconscomma tcons */
+ -1, /* (380) conslist ::= tcons */
+ 0, /* (381) tconscomma ::= */
+ -1, /* (382) defer_subclause_opt ::= defer_subclause */
+ -1, /* (383) resolvetype ::= raisetype */
+ -1, /* (384) selectnowith ::= oneselect */
+ -1, /* (385) oneselect ::= values */
+ -2, /* (386) sclp ::= selcollist COMMA */
+ -1, /* (387) as ::= ID|STRING */
+ -1, /* (388) indexed_opt ::= indexed_by */
+ 0, /* (389) returning ::= */
+ -1, /* (390) expr ::= term */
+ -1, /* (391) likeop ::= LIKE_KW|MATCH */
+ -1, /* (392) case_operand ::= expr */
+ -1, /* (393) exprlist ::= nexprlist */
+ -1, /* (394) nmnum ::= plus_num */
+ -1, /* (395) nmnum ::= nm */
+ -1, /* (396) nmnum ::= ON */
+ -1, /* (397) nmnum ::= DELETE */
+ -1, /* (398) nmnum ::= DEFAULT */
+ -1, /* (399) plus_num ::= INTEGER|FLOAT */
+ 0, /* (400) foreach_clause ::= */
+ -3, /* (401) foreach_clause ::= FOR EACH ROW */
+ -1, /* (402) trnm ::= nm */
+ 0, /* (403) tridxby ::= */
+ -1, /* (404) database_kw_opt ::= DATABASE */
+ 0, /* (405) database_kw_opt ::= */
+ 0, /* (406) kwcolumn_opt ::= */
+ -1, /* (407) kwcolumn_opt ::= COLUMNKW */
+ -1, /* (408) vtabarglist ::= vtabarg */
+ -3, /* (409) vtabarglist ::= vtabarglist COMMA vtabarg */
+ -2, /* (410) vtabarg ::= vtabarg vtabargtoken */
+ 0, /* (411) anylist ::= */
+ -4, /* (412) anylist ::= anylist LP anylist RP */
+ -2, /* (413) anylist ::= anylist ANY */
+ 0, /* (414) with ::= */
+ -1, /* (415) windowdefn_list ::= windowdefn */
+ -1, /* (416) window ::= frame_opt */
};
static void yy_accept(yyParser*); /* Forward Declaration */
@@ -177227,19 +178835,19 @@ static YYACTIONTYPE yy_reduce(
{ sqlite3FinishCoding(pParse); }
break;
case 3: /* cmd ::= BEGIN transtype trans_opt */
-{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy502);}
+{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy320);}
break;
case 4: /* transtype ::= */
-{yymsp[1].minor.yy502 = TK_DEFERRED;}
+{yymsp[1].minor.yy320 = TK_DEFERRED;}
break;
case 5: /* transtype ::= DEFERRED */
case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6);
case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7);
- case 329: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==329);
-{yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-X*/}
+ case 332: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==332);
+{yymsp[0].minor.yy320 = yymsp[0].major; /*A-overwrites-X*/}
break;
case 8: /* transtype ::= READONLY */
-{yymsp[0].minor.yy502 = TK_DEFERRED; /*yymsp[0].minor.yy502-overwrites-X*/}
+{yymsp[0].minor.yy320 = TK_DEFERRED; /*yymsp[0].minor.yy320-overwrites-X*/}
break;
case 9: /* cmd ::= COMMIT|END trans_opt */
case 10: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==10);
@@ -177262,7 +178870,7 @@ static YYACTIONTYPE yy_reduce(
break;
case 14: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */
{
- sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy502,0,0,yymsp[-2].minor.yy502);
+ sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy320,0,0,yymsp[-2].minor.yy320);
}
break;
case 15: /* createkw ::= CREATE */
@@ -177274,40 +178882,40 @@ static YYACTIONTYPE yy_reduce(
case 64: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==64);
case 74: /* defer_subclause_opt ::= */ yytestcase(yyruleno==74);
case 83: /* ifexists ::= */ yytestcase(yyruleno==83);
- case 103: /* distinct ::= */ yytestcase(yyruleno==103);
- case 251: /* collate ::= */ yytestcase(yyruleno==251);
-{yymsp[1].minor.yy502 = 0;}
+ case 105: /* distinct ::= */ yytestcase(yyruleno==105);
+ case 253: /* collate ::= */ yytestcase(yyruleno==253);
+{yymsp[1].minor.yy320 = 0;}
break;
case 17: /* ifnotexists ::= IF NOT EXISTS */
-{yymsp[-2].minor.yy502 = 1;}
+{yymsp[-2].minor.yy320 = 1;}
break;
case 18: /* temp ::= TEMP */
-{yymsp[0].minor.yy502 = pParse->db->init.busy==0;}
+{yymsp[0].minor.yy320 = pParse->db->init.busy==0;}
break;
case 20: /* create_table_args ::= LP columnlist conslist_opt RP table_option_set */
{
- sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy9,0);
+ sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy191,0);
}
break;
case 21: /* create_table_args ::= AS select */
{
- sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy637);
- sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy637);
+ sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy599);
+ sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy599);
}
break;
case 22: /* table_option_set ::= */
-{yymsp[1].minor.yy9 = 0;}
+{yymsp[1].minor.yy191 = 0;}
break;
case 23: /* table_option_set ::= table_option_set COMMA table_option */
-{yylhsminor.yy9 = yymsp[-2].minor.yy9|yymsp[0].minor.yy9;}
- yymsp[-2].minor.yy9 = yylhsminor.yy9;
+{yylhsminor.yy191 = yymsp[-2].minor.yy191|yymsp[0].minor.yy191;}
+ yymsp[-2].minor.yy191 = yylhsminor.yy191;
break;
case 24: /* table_option ::= WITHOUT nm */
{
if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){
- yymsp[-1].minor.yy9 = TF_WithoutRowid | TF_NoVisibleRowid;
+ yymsp[-1].minor.yy191 = TF_WithoutRowid | TF_NoVisibleRowid;
}else{
- yymsp[-1].minor.yy9 = 0;
+ yymsp[-1].minor.yy191 = 0;
sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z);
}
}
@@ -177315,9 +178923,9 @@ static YYACTIONTYPE yy_reduce(
case 25: /* table_option ::= RANDOM nm */
{
if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){
- yymsp[-1].minor.yy9 = TF_RandomRowid;
+ yymsp[-1].minor.yy191 = TF_RandomRowid;
}else{
- yymsp[-1].minor.yy9 = 0;
+ yymsp[-1].minor.yy191 = 0;
sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z);
}
}
@@ -177325,20 +178933,20 @@ static YYACTIONTYPE yy_reduce(
case 26: /* table_option ::= nm */
{
if( yymsp[0].minor.yy0.n==6 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"strict",6)==0 ){
- yylhsminor.yy9 = TF_Strict;
+ yylhsminor.yy191 = TF_Strict;
}else{
- yylhsminor.yy9 = 0;
+ yylhsminor.yy191 = 0;
sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z);
}
}
- yymsp[0].minor.yy9 = yylhsminor.yy9;
+ yymsp[0].minor.yy191 = yylhsminor.yy191;
break;
case 27: /* columnname ::= nm typetoken */
{sqlite3AddColumn(pParse,yymsp[-1].minor.yy0,yymsp[0].minor.yy0);}
break;
case 28: /* typetoken ::= */
case 67: /* conslist_opt ::= */ yytestcase(yyruleno==67);
- case 109: /* as ::= */ yytestcase(yyruleno==109);
+ case 111: /* as ::= */ yytestcase(yyruleno==111);
{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;}
break;
case 29: /* typetoken ::= typename LP signed RP */
@@ -177357,7 +178965,7 @@ static YYACTIONTYPE yy_reduce(
case 32: /* scanpt ::= */
{
assert( yyLookahead!=YYNOCODE );
- yymsp[1].minor.yy342 = yyLookaheadToken.z;
+ yymsp[1].minor.yy400 = yyLookaheadToken.z;
}
break;
case 33: /* scantok ::= */
@@ -177371,17 +178979,17 @@ static YYACTIONTYPE yy_reduce(
{pParse->constraintName = yymsp[0].minor.yy0;}
break;
case 35: /* ccons ::= DEFAULT scantok term */
-{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy590,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
+{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy66,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
break;
case 36: /* ccons ::= DEFAULT LP expr RP */
-{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy590,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);}
+{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy66,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);}
break;
case 37: /* ccons ::= DEFAULT PLUS scantok term */
-{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy590,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
+{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy66,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
break;
case 38: /* ccons ::= DEFAULT MINUS scantok term */
{
- Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy590, 0);
+ Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy66, 0);
sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);
}
break;
@@ -177396,166 +179004,166 @@ static YYACTIONTYPE yy_reduce(
}
break;
case 40: /* ccons ::= NOT NULL onconf */
-{sqlite3AddNotNull(pParse, yymsp[0].minor.yy502);}
+{sqlite3AddNotNull(pParse, yymsp[0].minor.yy320);}
break;
case 41: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
-{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy502,yymsp[0].minor.yy502,yymsp[-2].minor.yy502);}
+{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy320,yymsp[0].minor.yy320,yymsp[-2].minor.yy320);}
break;
case 42: /* ccons ::= UNIQUE onconf */
-{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy502,0,0,0,0,
+{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy320,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE,0);}
break;
case 43: /* ccons ::= CHECK LP expr RP */
-{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy590,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);}
+{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy66,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);}
break;
case 44: /* ccons ::= REFERENCES nm eidlist_opt refargs */
-{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy402,yymsp[0].minor.yy502);}
+{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy70,yymsp[0].minor.yy320);}
break;
case 45: /* ccons ::= defer_subclause */
-{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy502);}
+{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy320);}
break;
case 46: /* ccons ::= COLLATE ID|STRING */
{sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
break;
case 47: /* generated ::= LP expr RP */
-{sqlite3AddGenerated(pParse,yymsp[-1].minor.yy590,0);}
+{sqlite3AddGenerated(pParse,yymsp[-1].minor.yy66,0);}
break;
case 48: /* generated ::= LP expr RP ID */
-{sqlite3AddGenerated(pParse,yymsp[-2].minor.yy590,&yymsp[0].minor.yy0);}
+{sqlite3AddGenerated(pParse,yymsp[-2].minor.yy66,&yymsp[0].minor.yy0);}
break;
case 50: /* autoinc ::= AUTOINCR */
-{yymsp[0].minor.yy502 = 1;}
+{yymsp[0].minor.yy320 = 1;}
break;
case 51: /* refargs ::= */
-{ yymsp[1].minor.yy502 = OE_None*0x0101; /* EV: R-19803-45884 */}
+{ yymsp[1].minor.yy320 = OE_None*0x0101; /* EV: R-19803-45884 */}
break;
case 52: /* refargs ::= refargs refarg */
-{ yymsp[-1].minor.yy502 = (yymsp[-1].minor.yy502 & ~yymsp[0].minor.yy481.mask) | yymsp[0].minor.yy481.value; }
+{ yymsp[-1].minor.yy320 = (yymsp[-1].minor.yy320 & ~yymsp[0].minor.yy571.mask) | yymsp[0].minor.yy571.value; }
break;
case 53: /* refarg ::= MATCH nm */
-{ yymsp[-1].minor.yy481.value = 0; yymsp[-1].minor.yy481.mask = 0x000000; }
+{ yymsp[-1].minor.yy571.value = 0; yymsp[-1].minor.yy571.mask = 0x000000; }
break;
case 54: /* refarg ::= ON INSERT refact */
-{ yymsp[-2].minor.yy481.value = 0; yymsp[-2].minor.yy481.mask = 0x000000; }
+{ yymsp[-2].minor.yy571.value = 0; yymsp[-2].minor.yy571.mask = 0x000000; }
break;
case 55: /* refarg ::= ON DELETE refact */
-{ yymsp[-2].minor.yy481.value = yymsp[0].minor.yy502; yymsp[-2].minor.yy481.mask = 0x0000ff; }
+{ yymsp[-2].minor.yy571.value = yymsp[0].minor.yy320; yymsp[-2].minor.yy571.mask = 0x0000ff; }
break;
case 56: /* refarg ::= ON UPDATE refact */
-{ yymsp[-2].minor.yy481.value = yymsp[0].minor.yy502<<8; yymsp[-2].minor.yy481.mask = 0x00ff00; }
+{ yymsp[-2].minor.yy571.value = yymsp[0].minor.yy320<<8; yymsp[-2].minor.yy571.mask = 0x00ff00; }
break;
case 57: /* refact ::= SET NULL */
-{ yymsp[-1].minor.yy502 = OE_SetNull; /* EV: R-33326-45252 */}
+{ yymsp[-1].minor.yy320 = OE_SetNull; /* EV: R-33326-45252 */}
break;
case 58: /* refact ::= SET DEFAULT */
-{ yymsp[-1].minor.yy502 = OE_SetDflt; /* EV: R-33326-45252 */}
+{ yymsp[-1].minor.yy320 = OE_SetDflt; /* EV: R-33326-45252 */}
break;
case 59: /* refact ::= CASCADE */
-{ yymsp[0].minor.yy502 = OE_Cascade; /* EV: R-33326-45252 */}
+{ yymsp[0].minor.yy320 = OE_Cascade; /* EV: R-33326-45252 */}
break;
case 60: /* refact ::= RESTRICT */
-{ yymsp[0].minor.yy502 = OE_Restrict; /* EV: R-33326-45252 */}
+{ yymsp[0].minor.yy320 = OE_Restrict; /* EV: R-33326-45252 */}
break;
case 61: /* refact ::= NO ACTION */
-{ yymsp[-1].minor.yy502 = OE_None; /* EV: R-33326-45252 */}
+{ yymsp[-1].minor.yy320 = OE_None; /* EV: R-33326-45252 */}
break;
case 62: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
-{yymsp[-2].minor.yy502 = 0;}
+{yymsp[-2].minor.yy320 = 0;}
break;
case 63: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
case 78: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==78);
- case 176: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==176);
-{yymsp[-1].minor.yy502 = yymsp[0].minor.yy502;}
+ case 178: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==178);
+{yymsp[-1].minor.yy320 = yymsp[0].minor.yy320;}
break;
case 65: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
case 82: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==82);
- case 222: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==222);
- case 225: /* in_op ::= NOT IN */ yytestcase(yyruleno==225);
- case 252: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==252);
-{yymsp[-1].minor.yy502 = 1;}
+ case 224: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==224);
+ case 227: /* in_op ::= NOT IN */ yytestcase(yyruleno==227);
+ case 254: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==254);
+{yymsp[-1].minor.yy320 = 1;}
break;
case 66: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
-{yymsp[-1].minor.yy502 = 0;}
+{yymsp[-1].minor.yy320 = 0;}
break;
case 68: /* tconscomma ::= COMMA */
{pParse->constraintName.n = 0;}
break;
case 70: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
-{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy402,yymsp[0].minor.yy502,yymsp[-2].minor.yy502,0);}
+{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy70,yymsp[0].minor.yy320,yymsp[-2].minor.yy320,0);}
break;
case 71: /* tcons ::= UNIQUE LP sortlist RP onconf */
-{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy402,yymsp[0].minor.yy502,0,0,0,0,
+{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy70,yymsp[0].minor.yy320,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE,0);}
break;
case 72: /* tcons ::= CHECK LP expr RP onconf */
-{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy590,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);}
+{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy66,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);}
break;
case 73: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
{
- sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy402, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy402, yymsp[-1].minor.yy502);
- sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy502);
+ sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy70, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy70, yymsp[-1].minor.yy320);
+ sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy320);
}
break;
case 75: /* onconf ::= */
case 77: /* orconf ::= */ yytestcase(yyruleno==77);
-{yymsp[1].minor.yy502 = OE_Default;}
+{yymsp[1].minor.yy320 = OE_Default;}
break;
case 76: /* onconf ::= ON CONFLICT resolvetype */
-{yymsp[-2].minor.yy502 = yymsp[0].minor.yy502;}
+{yymsp[-2].minor.yy320 = yymsp[0].minor.yy320;}
break;
case 79: /* resolvetype ::= IGNORE */
-{yymsp[0].minor.yy502 = OE_Ignore;}
+{yymsp[0].minor.yy320 = OE_Ignore;}
break;
case 80: /* resolvetype ::= REPLACE */
- case 177: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==177);
-{yymsp[0].minor.yy502 = OE_Replace;}
+ case 179: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==179);
+{yymsp[0].minor.yy320 = OE_Replace;}
break;
case 81: /* cmd ::= DROP TABLE ifexists fullname */
{
- sqlite3DropTable(pParse, yymsp[0].minor.yy563, 0, yymsp[-1].minor.yy502);
+ sqlite3DropTable(pParse, yymsp[0].minor.yy595, 0, yymsp[-1].minor.yy320);
}
break;
case 84: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
{
- sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy402, yymsp[0].minor.yy637, yymsp[-7].minor.yy502, yymsp[-5].minor.yy502);
+ sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy70, yymsp[0].minor.yy599, yymsp[-7].minor.yy320, yymsp[-5].minor.yy320);
}
break;
case 85: /* cmd ::= DROP VIEW ifexists fullname */
{
- sqlite3DropTable(pParse, yymsp[0].minor.yy563, 1, yymsp[-1].minor.yy502);
+ sqlite3DropTable(pParse, yymsp[0].minor.yy595, 1, yymsp[-1].minor.yy320);
}
break;
case 86: /* cmd ::= createkw FUNCTION ifnotexists nm LANGUAGE nm AS STRING */
{
- libsql_create_function(pParse, &yymsp[-4].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, 0, yymsp[-5].minor.yy502);
+ libsql_create_function(pParse, &yymsp[-4].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, 0, yymsp[-5].minor.yy320);
}
break;
case 87: /* cmd ::= createkw FUNCTION ifnotexists nm LANGUAGE nm AS BLOB */
{
- libsql_create_function(pParse, &yymsp[-4].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, 1, yymsp[-5].minor.yy502);
+ libsql_create_function(pParse, &yymsp[-4].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, 1, yymsp[-5].minor.yy320);
}
break;
case 88: /* cmd ::= DROP FUNCTION ifexists nm */
{
- libsql_drop_function(pParse, &yymsp[0].minor.yy0, yymsp[-1].minor.yy502);
+ libsql_drop_function(pParse, &yymsp[0].minor.yy0, yymsp[-1].minor.yy320);
}
break;
case 89: /* cmd ::= select */
{
SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0};
- sqlite3Select(pParse, yymsp[0].minor.yy637, &dest);
- sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy637);
+ sqlite3Select(pParse, yymsp[0].minor.yy599, &dest);
+ sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy599);
}
break;
case 90: /* select ::= WITH wqlist selectnowith */
-{yymsp[-2].minor.yy637 = attachWithToSelect(pParse,yymsp[0].minor.yy637,yymsp[-1].minor.yy125);}
+{yymsp[-2].minor.yy599 = attachWithToSelect(pParse,yymsp[0].minor.yy599,yymsp[-1].minor.yy523);}
break;
case 91: /* select ::= WITH RECURSIVE wqlist selectnowith */
-{yymsp[-3].minor.yy637 = attachWithToSelect(pParse,yymsp[0].minor.yy637,yymsp[-1].minor.yy125);}
+{yymsp[-3].minor.yy599 = attachWithToSelect(pParse,yymsp[0].minor.yy599,yymsp[-1].minor.yy523);}
break;
case 92: /* select ::= selectnowith */
{
- Select *p = yymsp[0].minor.yy637;
+ Select *p = yymsp[0].minor.yy599;
if( p ){
parserDoubleLinkSelect(pParse, p);
}
@@ -177563,8 +179171,8 @@ static YYACTIONTYPE yy_reduce(
break;
case 93: /* selectnowith ::= selectnowith multiselect_op oneselect */
{
- Select *pRhs = yymsp[0].minor.yy637;
- Select *pLhs = yymsp[-2].minor.yy637;
+ Select *pRhs = yymsp[0].minor.yy599;
+ Select *pLhs = yymsp[-2].minor.yy599;
if( pRhs && pRhs->pPrior ){
SrcList *pFrom;
Token x;
@@ -177574,148 +179182,145 @@ static YYACTIONTYPE yy_reduce(
pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
}
if( pRhs ){
- pRhs->op = (u8)yymsp[-1].minor.yy502;
+ pRhs->op = (u8)yymsp[-1].minor.yy320;
pRhs->pPrior = pLhs;
if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
pRhs->selFlags &= ~SF_MultiValue;
- if( yymsp[-1].minor.yy502!=TK_ALL ) pParse->hasCompound = 1;
+ if( yymsp[-1].minor.yy320!=TK_ALL ) pParse->hasCompound = 1;
}else{
sqlite3SelectDelete(pParse->db, pLhs);
}
- yymsp[-2].minor.yy637 = pRhs;
+ yymsp[-2].minor.yy599 = pRhs;
}
break;
case 94: /* multiselect_op ::= UNION */
case 96: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==96);
-{yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-OP*/}
+{yymsp[0].minor.yy320 = yymsp[0].major; /*A-overwrites-OP*/}
break;
case 95: /* multiselect_op ::= UNION ALL */
-{yymsp[-1].minor.yy502 = TK_ALL;}
+{yymsp[-1].minor.yy320 = TK_ALL;}
break;
case 97: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
{
- yymsp[-8].minor.yy637 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy402,yymsp[-5].minor.yy563,yymsp[-4].minor.yy590,yymsp[-3].minor.yy402,yymsp[-2].minor.yy590,yymsp[-1].minor.yy402,yymsp[-7].minor.yy502,yymsp[0].minor.yy590);
+ yymsp[-8].minor.yy599 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy70,yymsp[-5].minor.yy595,yymsp[-4].minor.yy66,yymsp[-3].minor.yy70,yymsp[-2].minor.yy66,yymsp[-1].minor.yy70,yymsp[-7].minor.yy320,yymsp[0].minor.yy66);
}
break;
case 98: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
{
- yymsp[-9].minor.yy637 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy402,yymsp[-6].minor.yy563,yymsp[-5].minor.yy590,yymsp[-4].minor.yy402,yymsp[-3].minor.yy590,yymsp[-1].minor.yy402,yymsp[-8].minor.yy502,yymsp[0].minor.yy590);
- if( yymsp[-9].minor.yy637 ){
- yymsp[-9].minor.yy637->pWinDefn = yymsp[-2].minor.yy483;
+ yymsp[-9].minor.yy599 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy70,yymsp[-6].minor.yy595,yymsp[-5].minor.yy66,yymsp[-4].minor.yy70,yymsp[-3].minor.yy66,yymsp[-1].minor.yy70,yymsp[-8].minor.yy320,yymsp[0].minor.yy66);
+ if( yymsp[-9].minor.yy599 ){
+ yymsp[-9].minor.yy599->pWinDefn = yymsp[-2].minor.yy255;
}else{
- sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy483);
+ sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy255);
}
}
break;
case 99: /* values ::= VALUES LP nexprlist RP */
{
- yymsp[-3].minor.yy637 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy402,0,0,0,0,0,SF_Values,0);
+ yymsp[-3].minor.yy599 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy70,0,0,0,0,0,SF_Values,0);
}
break;
- case 100: /* values ::= values COMMA LP nexprlist RP */
+ case 100: /* oneselect ::= mvalues */
{
- Select *pRight, *pLeft = yymsp[-4].minor.yy637;
- pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy402,0,0,0,0,0,SF_Values|SF_MultiValue,0);
- if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
- if( pRight ){
- pRight->op = TK_ALL;
- pRight->pPrior = pLeft;
- yymsp[-4].minor.yy637 = pRight;
- }else{
- yymsp[-4].minor.yy637 = pLeft;
- }
+ sqlite3MultiValuesEnd(pParse, yymsp[0].minor.yy599);
+}
+ break;
+ case 101: /* mvalues ::= values COMMA LP nexprlist RP */
+ case 102: /* mvalues ::= mvalues COMMA LP nexprlist RP */ yytestcase(yyruleno==102);
+{
+ yymsp[-4].minor.yy599 = sqlite3MultiValues(pParse, yymsp[-4].minor.yy599, yymsp[-1].minor.yy70);
}
break;
- case 101: /* distinct ::= DISTINCT */
-{yymsp[0].minor.yy502 = SF_Distinct;}
+ case 103: /* distinct ::= DISTINCT */
+{yymsp[0].minor.yy320 = SF_Distinct;}
break;
- case 102: /* distinct ::= ALL */
-{yymsp[0].minor.yy502 = SF_All;}
+ case 104: /* distinct ::= ALL */
+{yymsp[0].minor.yy320 = SF_All;}
break;
- case 104: /* sclp ::= */
- case 137: /* orderby_opt ::= */ yytestcase(yyruleno==137);
- case 147: /* groupby_opt ::= */ yytestcase(yyruleno==147);
- case 237: /* exprlist ::= */ yytestcase(yyruleno==237);
- case 240: /* paren_exprlist ::= */ yytestcase(yyruleno==240);
- case 247: /* eidlist_opt ::= */ yytestcase(yyruleno==247);
-{yymsp[1].minor.yy402 = 0;}
+ case 106: /* sclp ::= */
+ case 139: /* orderby_opt ::= */ yytestcase(yyruleno==139);
+ case 149: /* groupby_opt ::= */ yytestcase(yyruleno==149);
+ case 239: /* exprlist ::= */ yytestcase(yyruleno==239);
+ case 242: /* paren_exprlist ::= */ yytestcase(yyruleno==242);
+ case 249: /* eidlist_opt ::= */ yytestcase(yyruleno==249);
+{yymsp[1].minor.yy70 = 0;}
break;
- case 105: /* selcollist ::= sclp scanpt expr scanpt as */
+ case 107: /* selcollist ::= sclp scanpt expr scanpt as */
{
- yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy402, yymsp[-2].minor.yy590);
- if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy402, &yymsp[0].minor.yy0, 1);
- sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy402,yymsp[-3].minor.yy342,yymsp[-1].minor.yy342);
+ yymsp[-4].minor.yy70 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy70, yymsp[-2].minor.yy66);
+ if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy70, &yymsp[0].minor.yy0, 1);
+ sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy70,yymsp[-3].minor.yy400,yymsp[-1].minor.yy400);
}
break;
- case 106: /* selcollist ::= sclp scanpt STAR */
+ case 108: /* selcollist ::= sclp scanpt STAR */
{
Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
sqlite3ExprSetErrorOffset(p, (int)(yymsp[0].minor.yy0.z - pParse->zTail));
- yymsp[-2].minor.yy402 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy402, p);
+ yymsp[-2].minor.yy70 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy70, p);
}
break;
- case 107: /* selcollist ::= sclp scanpt nm DOT STAR */
+ case 109: /* selcollist ::= sclp scanpt nm DOT STAR */
{
Expr *pRight, *pLeft, *pDot;
pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
sqlite3ExprSetErrorOffset(pRight, (int)(yymsp[0].minor.yy0.z - pParse->zTail));
pLeft = tokenExpr(pParse, TK_ID, yymsp[-2].minor.yy0);
pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
- yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402, pDot);
+ yymsp[-4].minor.yy70 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy70, pDot);
}
break;
- case 108: /* as ::= AS nm */
- case 120: /* dbnm ::= DOT nm */ yytestcase(yyruleno==120);
- case 263: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==263);
- case 264: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==264);
+ case 110: /* as ::= AS nm */
+ case 122: /* dbnm ::= DOT nm */ yytestcase(yyruleno==122);
+ case 265: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==265);
+ case 266: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==266);
{yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;}
break;
- case 110: /* from ::= */
- case 113: /* stl_prefix ::= */ yytestcase(yyruleno==113);
-{yymsp[1].minor.yy563 = 0;}
+ case 112: /* from ::= */
+ case 115: /* stl_prefix ::= */ yytestcase(yyruleno==115);
+{yymsp[1].minor.yy595 = 0;}
break;
- case 111: /* from ::= FROM seltablist */
+ case 113: /* from ::= FROM seltablist */
{
- yymsp[-1].minor.yy563 = yymsp[0].minor.yy563;
- sqlite3SrcListShiftJoinType(pParse,yymsp[-1].minor.yy563);
+ yymsp[-1].minor.yy595 = yymsp[0].minor.yy595;
+ sqlite3SrcListShiftJoinType(pParse,yymsp[-1].minor.yy595);
}
break;
- case 112: /* stl_prefix ::= seltablist joinop */
+ case 114: /* stl_prefix ::= seltablist joinop */
{
- if( ALWAYS(yymsp[-1].minor.yy563 && yymsp[-1].minor.yy563->nSrc>0) ) yymsp[-1].minor.yy563->a[yymsp[-1].minor.yy563->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy502;
+ if( ALWAYS(yymsp[-1].minor.yy595 && yymsp[-1].minor.yy595->nSrc>0) ) yymsp[-1].minor.yy595->a[yymsp[-1].minor.yy595->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy320;
}
break;
- case 114: /* seltablist ::= stl_prefix nm dbnm as on_using */
+ case 116: /* seltablist ::= stl_prefix nm dbnm as on_using */
{
- yymsp[-4].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-4].minor.yy563,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy421);
+ yymsp[-4].minor.yy595 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-4].minor.yy595,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy497);
}
break;
- case 115: /* seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
+ case 117: /* seltablist ::= stl_prefix nm dbnm as indexed_by on_using */
{
- yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy421);
- sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy563, &yymsp[-1].minor.yy0);
+ yymsp[-5].minor.yy595 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy595,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy497);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy595, &yymsp[-1].minor.yy0);
}
break;
- case 116: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
+ case 118: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */
{
- yymsp[-7].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy563,&yymsp[-6].minor.yy0,&yymsp[-5].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy421);
- sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy563, yymsp[-3].minor.yy402);
+ yymsp[-7].minor.yy595 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy595,&yymsp[-6].minor.yy0,&yymsp[-5].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy497);
+ sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy595, yymsp[-3].minor.yy70);
}
break;
- case 117: /* seltablist ::= stl_prefix LP select RP as on_using */
+ case 119: /* seltablist ::= stl_prefix LP select RP as on_using */
{
- yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,0,0,&yymsp[-1].minor.yy0,yymsp[-3].minor.yy637,&yymsp[0].minor.yy421);
+ yymsp[-5].minor.yy595 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy595,0,0,&yymsp[-1].minor.yy0,yymsp[-3].minor.yy599,&yymsp[0].minor.yy497);
}
break;
- case 118: /* seltablist ::= stl_prefix LP seltablist RP as on_using */
+ case 120: /* seltablist ::= stl_prefix LP seltablist RP as on_using */
{
- if( yymsp[-5].minor.yy563==0 && yymsp[-1].minor.yy0.n==0 && yymsp[0].minor.yy421.pOn==0 && yymsp[0].minor.yy421.pUsing==0 ){
- yymsp[-5].minor.yy563 = yymsp[-3].minor.yy563;
- }else if( ALWAYS(yymsp[-3].minor.yy563!=0) && yymsp[-3].minor.yy563->nSrc==1 ){
- yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,0,0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy421);
- if( yymsp[-5].minor.yy563 ){
- SrcItem *pNew = &yymsp[-5].minor.yy563->a[yymsp[-5].minor.yy563->nSrc-1];
- SrcItem *pOld = yymsp[-3].minor.yy563->a;
+ if( yymsp[-5].minor.yy595==0 && yymsp[-1].minor.yy0.n==0 && yymsp[0].minor.yy497.pOn==0 && yymsp[0].minor.yy497.pUsing==0 ){
+ yymsp[-5].minor.yy595 = yymsp[-3].minor.yy595;
+ }else if( ALWAYS(yymsp[-3].minor.yy595!=0) && yymsp[-3].minor.yy595->nSrc==1 ){
+ yymsp[-5].minor.yy595 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy595,0,0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy497);
+ if( yymsp[-5].minor.yy595 ){
+ SrcItem *pNew = &yymsp[-5].minor.yy595->a[yymsp[-5].minor.yy595->nSrc-1];
+ SrcItem *pOld = yymsp[-3].minor.yy595->a;
pNew->zName = pOld->zName;
pNew->zDatabase = pOld->zDatabase;
pNew->pSelect = pOld->pSelect;
@@ -177731,154 +179336,154 @@ static YYACTIONTYPE yy_reduce(
pOld->zName = pOld->zDatabase = 0;
pOld->pSelect = 0;
}
- sqlite3SrcListDelete(pParse->db, yymsp[-3].minor.yy563);
+ sqlite3SrcListDelete(pParse->db, yymsp[-3].minor.yy595);
}else{
Select *pSubquery;
- sqlite3SrcListShiftJoinType(pParse,yymsp[-3].minor.yy563);
- pSubquery = sqlite3SelectNew(pParse,0,yymsp[-3].minor.yy563,0,0,0,0,SF_NestedFrom,0);
- yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,0,0,&yymsp[-1].minor.yy0,pSubquery,&yymsp[0].minor.yy421);
+ sqlite3SrcListShiftJoinType(pParse,yymsp[-3].minor.yy595);
+ pSubquery = sqlite3SelectNew(pParse,0,yymsp[-3].minor.yy595,0,0,0,0,SF_NestedFrom,0);
+ yymsp[-5].minor.yy595 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy595,0,0,&yymsp[-1].minor.yy0,pSubquery,&yymsp[0].minor.yy497);
}
}
break;
- case 119: /* dbnm ::= */
- case 134: /* indexed_opt ::= */ yytestcase(yyruleno==134);
+ case 121: /* dbnm ::= */
+ case 136: /* indexed_opt ::= */ yytestcase(yyruleno==136);
{yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;}
break;
- case 121: /* fullname ::= nm */
+ case 123: /* fullname ::= nm */
{
- yylhsminor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0);
- if( IN_RENAME_OBJECT && yylhsminor.yy563 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy563->a[0].zName, &yymsp[0].minor.yy0);
+ yylhsminor.yy595 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0);
+ if( IN_RENAME_OBJECT && yylhsminor.yy595 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy595->a[0].zName, &yymsp[0].minor.yy0);
}
- yymsp[0].minor.yy563 = yylhsminor.yy563;
+ yymsp[0].minor.yy595 = yylhsminor.yy595;
break;
- case 122: /* fullname ::= nm DOT nm */
+ case 124: /* fullname ::= nm DOT nm */
{
- yylhsminor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
- if( IN_RENAME_OBJECT && yylhsminor.yy563 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy563->a[0].zName, &yymsp[0].minor.yy0);
+ yylhsminor.yy595 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
+ if( IN_RENAME_OBJECT && yylhsminor.yy595 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy595->a[0].zName, &yymsp[0].minor.yy0);
}
- yymsp[-2].minor.yy563 = yylhsminor.yy563;
+ yymsp[-2].minor.yy595 = yylhsminor.yy595;
break;
- case 123: /* xfullname ::= nm */
-{yymsp[0].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/}
+ case 125: /* xfullname ::= nm */
+{yymsp[0].minor.yy595 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/}
break;
- case 124: /* xfullname ::= nm DOT nm */
-{yymsp[-2].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 126: /* xfullname ::= nm DOT nm */
+{yymsp[-2].minor.yy595 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 125: /* xfullname ::= nm DOT nm AS nm */
+ case 127: /* xfullname ::= nm DOT nm AS nm */
{
- yymsp[-4].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/
- if( yymsp[-4].minor.yy563 ) yymsp[-4].minor.yy563->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
+ yymsp[-4].minor.yy595 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/
+ if( yymsp[-4].minor.yy595 ) yymsp[-4].minor.yy595->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
}
break;
- case 126: /* xfullname ::= nm AS nm */
+ case 128: /* xfullname ::= nm AS nm */
{
- yymsp[-2].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/
- if( yymsp[-2].minor.yy563 ) yymsp[-2].minor.yy563->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
+ yymsp[-2].minor.yy595 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/
+ if( yymsp[-2].minor.yy595 ) yymsp[-2].minor.yy595->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
}
break;
- case 127: /* joinop ::= COMMA|JOIN */
-{ yymsp[0].minor.yy502 = JT_INNER; }
+ case 129: /* joinop ::= COMMA|JOIN */
+{ yymsp[0].minor.yy320 = JT_INNER; }
break;
- case 128: /* joinop ::= JOIN_KW JOIN */
-{yymsp[-1].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}
+ case 130: /* joinop ::= JOIN_KW JOIN */
+{yymsp[-1].minor.yy320 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}
break;
- case 129: /* joinop ::= JOIN_KW nm JOIN */
-{yymsp[-2].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
+ case 131: /* joinop ::= JOIN_KW nm JOIN */
+{yymsp[-2].minor.yy320 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
break;
- case 130: /* joinop ::= JOIN_KW nm nm JOIN */
-{yymsp[-3].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
+ case 132: /* joinop ::= JOIN_KW nm nm JOIN */
+{yymsp[-3].minor.yy320 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
break;
- case 131: /* on_using ::= ON expr */
-{yymsp[-1].minor.yy421.pOn = yymsp[0].minor.yy590; yymsp[-1].minor.yy421.pUsing = 0;}
+ case 133: /* on_using ::= ON expr */
+{yymsp[-1].minor.yy497.pOn = yymsp[0].minor.yy66; yymsp[-1].minor.yy497.pUsing = 0;}
break;
- case 132: /* on_using ::= USING LP idlist RP */
-{yymsp[-3].minor.yy421.pOn = 0; yymsp[-3].minor.yy421.pUsing = yymsp[-1].minor.yy204;}
+ case 134: /* on_using ::= USING LP idlist RP */
+{yymsp[-3].minor.yy497.pOn = 0; yymsp[-3].minor.yy497.pUsing = yymsp[-1].minor.yy332;}
break;
- case 133: /* on_using ::= */
- case 246: /* indextype ::= */ yytestcase(yyruleno==246);
-{yymsp[1].minor.yy421.pOn = 0; yymsp[1].minor.yy421.pUsing = 0;}
+ case 135: /* on_using ::= */
+ case 248: /* indextype ::= */ yytestcase(yyruleno==248);
+{yymsp[1].minor.yy497.pOn = 0; yymsp[1].minor.yy497.pUsing = 0;}
break;
- case 135: /* indexed_by ::= INDEXED BY nm */
+ case 137: /* indexed_by ::= INDEXED BY nm */
{yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;}
break;
- case 136: /* indexed_by ::= NOT INDEXED */
+ case 138: /* indexed_by ::= NOT INDEXED */
{yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;}
break;
- case 138: /* orderby_opt ::= ORDER BY sortlist */
- case 148: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==148);
-{yymsp[-2].minor.yy402 = yymsp[0].minor.yy402;}
+ case 140: /* orderby_opt ::= ORDER BY sortlist */
+ case 150: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==150);
+{yymsp[-2].minor.yy70 = yymsp[0].minor.yy70;}
break;
- case 139: /* sortlist ::= sortlist COMMA expr sortorder nulls */
+ case 141: /* sortlist ::= sortlist COMMA expr sortorder nulls */
{
- yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402,yymsp[-2].minor.yy590);
- sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy402,yymsp[-1].minor.yy502,yymsp[0].minor.yy502);
+ yymsp[-4].minor.yy70 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy70,yymsp[-2].minor.yy66);
+ sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy70,yymsp[-1].minor.yy320,yymsp[0].minor.yy320);
}
break;
- case 140: /* sortlist ::= expr sortorder nulls */
+ case 142: /* sortlist ::= expr sortorder nulls */
{
- yymsp[-2].minor.yy402 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy590); /*A-overwrites-Y*/
- sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy402,yymsp[-1].minor.yy502,yymsp[0].minor.yy502);
+ yymsp[-2].minor.yy70 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy66); /*A-overwrites-Y*/
+ sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy70,yymsp[-1].minor.yy320,yymsp[0].minor.yy320);
}
break;
- case 141: /* sortorder ::= ASC */
-{yymsp[0].minor.yy502 = SQLITE_SO_ASC;}
+ case 143: /* sortorder ::= ASC */
+{yymsp[0].minor.yy320 = SQLITE_SO_ASC;}
break;
- case 142: /* sortorder ::= DESC */
-{yymsp[0].minor.yy502 = SQLITE_SO_DESC;}
+ case 144: /* sortorder ::= DESC */
+{yymsp[0].minor.yy320 = SQLITE_SO_DESC;}
break;
- case 143: /* sortorder ::= */
- case 146: /* nulls ::= */ yytestcase(yyruleno==146);
-{yymsp[1].minor.yy502 = SQLITE_SO_UNDEFINED;}
+ case 145: /* sortorder ::= */
+ case 148: /* nulls ::= */ yytestcase(yyruleno==148);
+{yymsp[1].minor.yy320 = SQLITE_SO_UNDEFINED;}
break;
- case 144: /* nulls ::= NULLS FIRST */
-{yymsp[-1].minor.yy502 = SQLITE_SO_ASC;}
+ case 146: /* nulls ::= NULLS FIRST */
+{yymsp[-1].minor.yy320 = SQLITE_SO_ASC;}
break;
- case 145: /* nulls ::= NULLS LAST */
-{yymsp[-1].minor.yy502 = SQLITE_SO_DESC;}
+ case 147: /* nulls ::= NULLS LAST */
+{yymsp[-1].minor.yy320 = SQLITE_SO_DESC;}
break;
- case 149: /* having_opt ::= */
- case 151: /* limit_opt ::= */ yytestcase(yyruleno==151);
- case 156: /* where_opt ::= */ yytestcase(yyruleno==156);
- case 158: /* where_opt_ret ::= */ yytestcase(yyruleno==158);
- case 235: /* case_else ::= */ yytestcase(yyruleno==235);
- case 236: /* case_operand ::= */ yytestcase(yyruleno==236);
- case 257: /* vinto ::= */ yytestcase(yyruleno==257);
-{yymsp[1].minor.yy590 = 0;}
+ case 151: /* having_opt ::= */
+ case 153: /* limit_opt ::= */ yytestcase(yyruleno==153);
+ case 158: /* where_opt ::= */ yytestcase(yyruleno==158);
+ case 160: /* where_opt_ret ::= */ yytestcase(yyruleno==160);
+ case 237: /* case_else ::= */ yytestcase(yyruleno==237);
+ case 238: /* case_operand ::= */ yytestcase(yyruleno==238);
+ case 259: /* vinto ::= */ yytestcase(yyruleno==259);
+{yymsp[1].minor.yy66 = 0;}
break;
- case 150: /* having_opt ::= HAVING expr */
- case 157: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==157);
- case 159: /* where_opt_ret ::= WHERE expr */ yytestcase(yyruleno==159);
- case 234: /* case_else ::= ELSE expr */ yytestcase(yyruleno==234);
- case 256: /* vinto ::= INTO expr */ yytestcase(yyruleno==256);
-{yymsp[-1].minor.yy590 = yymsp[0].minor.yy590;}
+ case 152: /* having_opt ::= HAVING expr */
+ case 159: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==159);
+ case 161: /* where_opt_ret ::= WHERE expr */ yytestcase(yyruleno==161);
+ case 236: /* case_else ::= ELSE expr */ yytestcase(yyruleno==236);
+ case 258: /* vinto ::= INTO expr */ yytestcase(yyruleno==258);
+{yymsp[-1].minor.yy66 = yymsp[0].minor.yy66;}
break;
- case 152: /* limit_opt ::= LIMIT expr */
-{yymsp[-1].minor.yy590 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy590,0);}
+ case 154: /* limit_opt ::= LIMIT expr */
+{yymsp[-1].minor.yy66 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy66,0);}
break;
- case 153: /* limit_opt ::= LIMIT expr OFFSET expr */
-{yymsp[-3].minor.yy590 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy590,yymsp[0].minor.yy590);}
+ case 155: /* limit_opt ::= LIMIT expr OFFSET expr */
+{yymsp[-3].minor.yy66 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy66,yymsp[0].minor.yy66);}
break;
- case 154: /* limit_opt ::= LIMIT expr COMMA expr */
-{yymsp[-3].minor.yy590 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy590,yymsp[-2].minor.yy590);}
+ case 156: /* limit_opt ::= LIMIT expr COMMA expr */
+{yymsp[-3].minor.yy66 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy66,yymsp[-2].minor.yy66);}
break;
- case 155: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
+ case 157: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */
{
- sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy563, &yymsp[-1].minor.yy0);
- sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy563,yymsp[0].minor.yy590,0,0);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy595, &yymsp[-1].minor.yy0);
+ sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy595,yymsp[0].minor.yy66,0,0);
}
break;
- case 160: /* where_opt_ret ::= RETURNING selcollist */
-{sqlite3AddReturning(pParse,yymsp[0].minor.yy402); yymsp[-1].minor.yy590 = 0;}
+ case 162: /* where_opt_ret ::= RETURNING selcollist */
+{sqlite3AddReturning(pParse,yymsp[0].minor.yy70); yymsp[-1].minor.yy66 = 0;}
break;
- case 161: /* where_opt_ret ::= WHERE expr RETURNING selcollist */
-{sqlite3AddReturning(pParse,yymsp[0].minor.yy402); yymsp[-3].minor.yy590 = yymsp[-2].minor.yy590;}
+ case 163: /* where_opt_ret ::= WHERE expr RETURNING selcollist */
+{sqlite3AddReturning(pParse,yymsp[0].minor.yy70); yymsp[-3].minor.yy66 = yymsp[-2].minor.yy66;}
break;
- case 162: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
+ case 164: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */
{
- sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy563, &yymsp[-4].minor.yy0);
- sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy402,"set list");
- if( yymsp[-1].minor.yy563 ){
- SrcList *pFromClause = yymsp[-1].minor.yy563;
+ sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy595, &yymsp[-4].minor.yy0);
+ sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy70,"set list");
+ if( yymsp[-1].minor.yy595 ){
+ SrcList *pFromClause = yymsp[-1].minor.yy595;
if( pFromClause->nSrc>1 ){
Select *pSubquery;
Token as;
@@ -177887,92 +179492,92 @@ static YYACTIONTYPE yy_reduce(
as.z = 0;
pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0);
}
- yymsp[-5].minor.yy563 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy563, pFromClause);
+ yymsp[-5].minor.yy595 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy595, pFromClause);
}
- sqlite3Update(pParse,yymsp[-5].minor.yy563,yymsp[-2].minor.yy402,yymsp[0].minor.yy590,yymsp[-6].minor.yy502,0,0,0);
+ sqlite3Update(pParse,yymsp[-5].minor.yy595,yymsp[-2].minor.yy70,yymsp[0].minor.yy66,yymsp[-6].minor.yy320,0,0,0);
}
break;
- case 163: /* setlist ::= setlist COMMA nm EQ expr */
+ case 165: /* setlist ::= setlist COMMA nm EQ expr */
{
- yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy402, yymsp[0].minor.yy590);
- sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy402, &yymsp[-2].minor.yy0, 1);
+ yymsp[-4].minor.yy70 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy70, yymsp[0].minor.yy66);
+ sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy70, &yymsp[-2].minor.yy0, 1);
}
break;
- case 164: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
+ case 166: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
{
- yymsp[-6].minor.yy402 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy402, yymsp[-3].minor.yy204, yymsp[0].minor.yy590);
+ yymsp[-6].minor.yy70 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy70, yymsp[-3].minor.yy332, yymsp[0].minor.yy66);
}
break;
- case 165: /* setlist ::= nm EQ expr */
+ case 167: /* setlist ::= nm EQ expr */
{
- yylhsminor.yy402 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy590);
- sqlite3ExprListSetName(pParse, yylhsminor.yy402, &yymsp[-2].minor.yy0, 1);
+ yylhsminor.yy70 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy66);
+ sqlite3ExprListSetName(pParse, yylhsminor.yy70, &yymsp[-2].minor.yy0, 1);
}
- yymsp[-2].minor.yy402 = yylhsminor.yy402;
+ yymsp[-2].minor.yy70 = yylhsminor.yy70;
break;
- case 166: /* setlist ::= LP idlist RP EQ expr */
+ case 168: /* setlist ::= LP idlist RP EQ expr */
{
- yymsp[-4].minor.yy402 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy204, yymsp[0].minor.yy590);
+ yymsp[-4].minor.yy70 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy332, yymsp[0].minor.yy66);
}
break;
- case 167: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ case 169: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
{
- sqlite3Insert(pParse, yymsp[-3].minor.yy563, yymsp[-1].minor.yy637, yymsp[-2].minor.yy204, yymsp[-5].minor.yy502, yymsp[0].minor.yy403);
+ sqlite3Insert(pParse, yymsp[-3].minor.yy595, yymsp[-1].minor.yy599, yymsp[-2].minor.yy332, yymsp[-5].minor.yy320, yymsp[0].minor.yy186);
}
break;
- case 168: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
+ case 170: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */
{
- sqlite3Insert(pParse, yymsp[-4].minor.yy563, 0, yymsp[-3].minor.yy204, yymsp[-6].minor.yy502, 0);
+ sqlite3Insert(pParse, yymsp[-4].minor.yy595, 0, yymsp[-3].minor.yy332, yymsp[-6].minor.yy320, 0);
}
break;
- case 169: /* upsert ::= */
-{ yymsp[1].minor.yy403 = 0; }
+ case 171: /* upsert ::= */
+{ yymsp[1].minor.yy186 = 0; }
break;
- case 170: /* upsert ::= RETURNING selcollist */
-{ yymsp[-1].minor.yy403 = 0; sqlite3AddReturning(pParse,yymsp[0].minor.yy402); }
+ case 172: /* upsert ::= RETURNING selcollist */
+{ yymsp[-1].minor.yy186 = 0; sqlite3AddReturning(pParse,yymsp[0].minor.yy70); }
break;
- case 171: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
-{ yymsp[-11].minor.yy403 = sqlite3UpsertNew(pParse->db,yymsp[-8].minor.yy402,yymsp[-6].minor.yy590,yymsp[-2].minor.yy402,yymsp[-1].minor.yy590,yymsp[0].minor.yy403);}
+ case 173: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */
+{ yymsp[-11].minor.yy186 = sqlite3UpsertNew(pParse->db,yymsp[-8].minor.yy70,yymsp[-6].minor.yy66,yymsp[-2].minor.yy70,yymsp[-1].minor.yy66,yymsp[0].minor.yy186);}
break;
- case 172: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
-{ yymsp[-8].minor.yy403 = sqlite3UpsertNew(pParse->db,yymsp[-5].minor.yy402,yymsp[-3].minor.yy590,0,0,yymsp[0].minor.yy403); }
+ case 174: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */
+{ yymsp[-8].minor.yy186 = sqlite3UpsertNew(pParse->db,yymsp[-5].minor.yy70,yymsp[-3].minor.yy66,0,0,yymsp[0].minor.yy186); }
break;
- case 173: /* upsert ::= ON CONFLICT DO NOTHING returning */
-{ yymsp[-4].minor.yy403 = sqlite3UpsertNew(pParse->db,0,0,0,0,0); }
+ case 175: /* upsert ::= ON CONFLICT DO NOTHING returning */
+{ yymsp[-4].minor.yy186 = sqlite3UpsertNew(pParse->db,0,0,0,0,0); }
break;
- case 174: /* upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
-{ yymsp[-7].minor.yy403 = sqlite3UpsertNew(pParse->db,0,0,yymsp[-2].minor.yy402,yymsp[-1].minor.yy590,0);}
+ case 176: /* upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */
+{ yymsp[-7].minor.yy186 = sqlite3UpsertNew(pParse->db,0,0,yymsp[-2].minor.yy70,yymsp[-1].minor.yy66,0);}
break;
- case 175: /* returning ::= RETURNING selcollist */
-{sqlite3AddReturning(pParse,yymsp[0].minor.yy402);}
+ case 177: /* returning ::= RETURNING selcollist */
+{sqlite3AddReturning(pParse,yymsp[0].minor.yy70);}
break;
- case 178: /* idlist_opt ::= */
-{yymsp[1].minor.yy204 = 0;}
+ case 180: /* idlist_opt ::= */
+{yymsp[1].minor.yy332 = 0;}
break;
- case 179: /* idlist_opt ::= LP idlist RP */
-{yymsp[-2].minor.yy204 = yymsp[-1].minor.yy204;}
+ case 181: /* idlist_opt ::= LP idlist RP */
+{yymsp[-2].minor.yy332 = yymsp[-1].minor.yy332;}
break;
- case 180: /* idlist ::= idlist COMMA nm */
-{yymsp[-2].minor.yy204 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy204,&yymsp[0].minor.yy0);}
+ case 182: /* idlist ::= idlist COMMA nm */
+{yymsp[-2].minor.yy332 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy332,&yymsp[0].minor.yy0);}
break;
- case 181: /* idlist ::= nm */
-{yymsp[0].minor.yy204 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
+ case 183: /* idlist ::= nm */
+{yymsp[0].minor.yy332 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
break;
- case 182: /* expr ::= LP expr RP */
-{yymsp[-2].minor.yy590 = yymsp[-1].minor.yy590;}
+ case 184: /* expr ::= LP expr RP */
+{yymsp[-2].minor.yy66 = yymsp[-1].minor.yy66;}
break;
- case 183: /* expr ::= ID|INDEXED|JOIN_KW */
-{yymsp[0].minor.yy590=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 185: /* expr ::= ID|INDEXED|JOIN_KW */
+{yymsp[0].minor.yy66=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 184: /* expr ::= nm DOT nm */
+ case 186: /* expr ::= nm DOT nm */
{
Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0);
Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0);
- yylhsminor.yy590 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
+ yylhsminor.yy66 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
}
- yymsp[-2].minor.yy590 = yylhsminor.yy590;
+ yymsp[-2].minor.yy66 = yylhsminor.yy66;
break;
- case 185: /* expr ::= nm DOT nm DOT nm */
+ case 187: /* expr ::= nm DOT nm DOT nm */
{
Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-4].minor.yy0);
Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0);
@@ -177981,27 +179586,27 @@ static YYACTIONTYPE yy_reduce(
if( IN_RENAME_OBJECT ){
sqlite3RenameTokenRemap(pParse, 0, temp1);
}
- yylhsminor.yy590 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
+ yylhsminor.yy66 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
}
- yymsp[-4].minor.yy590 = yylhsminor.yy590;
+ yymsp[-4].minor.yy66 = yylhsminor.yy66;
break;
- case 186: /* term ::= NULL|FLOAT|BLOB */
- case 187: /* term ::= STRING */ yytestcase(yyruleno==187);
-{yymsp[0].minor.yy590=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 188: /* term ::= NULL|FLOAT|BLOB */
+ case 189: /* term ::= STRING */ yytestcase(yyruleno==189);
+{yymsp[0].minor.yy66=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 188: /* term ::= INTEGER */
+ case 190: /* term ::= INTEGER */
{
- yylhsminor.yy590 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
- if( yylhsminor.yy590 ) yylhsminor.yy590->w.iOfst = (int)(yymsp[0].minor.yy0.z - pParse->zTail);
+ yylhsminor.yy66 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
+ if( yylhsminor.yy66 ) yylhsminor.yy66->w.iOfst = (int)(yymsp[0].minor.yy0.z - pParse->zTail);
}
- yymsp[0].minor.yy590 = yylhsminor.yy590;
+ yymsp[0].minor.yy66 = yylhsminor.yy66;
break;
- case 189: /* expr ::= VARIABLE */
+ case 191: /* expr ::= VARIABLE */
{
if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){
u32 n = yymsp[0].minor.yy0.n;
- yymsp[0].minor.yy590 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0);
- sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy590, n);
+ yymsp[0].minor.yy66 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0);
+ sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy66, n);
}else{
/* When doing a nested parse, one can include terms in an expression
** that look like this: #1 #2 ... These terms refer to registers
@@ -178010,194 +179615,203 @@ static YYACTIONTYPE yy_reduce(
assert( t.n>=2 );
if( pParse->nested==0 ){
sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
- yymsp[0].minor.yy590 = 0;
+ yymsp[0].minor.yy66 = 0;
}else{
- yymsp[0].minor.yy590 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
- if( yymsp[0].minor.yy590 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy590->iTable);
+ yymsp[0].minor.yy66 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
+ if( yymsp[0].minor.yy66 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy66->iTable);
}
}
}
break;
- case 190: /* expr ::= expr COLLATE ID|STRING */
+ case 192: /* expr ::= expr COLLATE ID|STRING */
{
- yymsp[-2].minor.yy590 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy590, &yymsp[0].minor.yy0, 1);
+ yymsp[-2].minor.yy66 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy66, &yymsp[0].minor.yy0, 1);
}
break;
- case 191: /* expr ::= CAST LP expr AS typetoken RP */
+ case 193: /* expr ::= CAST LP expr AS typetoken RP */
{
- yymsp[-5].minor.yy590 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
- sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy590, yymsp[-3].minor.yy590, 0);
+ yymsp[-5].minor.yy66 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
+ sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy66, yymsp[-3].minor.yy66, 0);
}
break;
- case 192: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
+ case 194: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */
{
- yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy402, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy502);
+ yylhsminor.yy66 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy70, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy320);
}
- yymsp[-4].minor.yy590 = yylhsminor.yy590;
+ yymsp[-4].minor.yy66 = yylhsminor.yy66;
break;
- case 193: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
+ case 195: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */
{
- yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-4].minor.yy402, &yymsp[-7].minor.yy0, yymsp[-5].minor.yy502);
- sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy590, yymsp[-1].minor.yy402);
+ yylhsminor.yy66 = sqlite3ExprFunction(pParse, yymsp[-4].minor.yy70, &yymsp[-7].minor.yy0, yymsp[-5].minor.yy320);
+ sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy66, yymsp[-1].minor.yy70);
}
- yymsp[-7].minor.yy590 = yylhsminor.yy590;
+ yymsp[-7].minor.yy66 = yylhsminor.yy66;
break;
- case 194: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
+ case 196: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP */
{
- yylhsminor.yy590 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0);
+ yylhsminor.yy66 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0);
}
- yymsp[-3].minor.yy590 = yylhsminor.yy590;
+ yymsp[-3].minor.yy66 = yylhsminor.yy66;
break;
- case 195: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
+ case 197: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */
{
- yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy402, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy502);
- sqlite3WindowAttach(pParse, yylhsminor.yy590, yymsp[0].minor.yy483);
+ yylhsminor.yy66 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy70, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy320);
+ sqlite3WindowAttach(pParse, yylhsminor.yy66, yymsp[0].minor.yy255);
}
- yymsp[-5].minor.yy590 = yylhsminor.yy590;
+ yymsp[-5].minor.yy66 = yylhsminor.yy66;
break;
- case 196: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
+ case 198: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */
{
- yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-5].minor.yy402, &yymsp[-8].minor.yy0, yymsp[-6].minor.yy502);
- sqlite3WindowAttach(pParse, yylhsminor.yy590, yymsp[0].minor.yy483);
- sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy590, yymsp[-2].minor.yy402);
+ yylhsminor.yy66 = sqlite3ExprFunction(pParse, yymsp[-5].minor.yy70, &yymsp[-8].minor.yy0, yymsp[-6].minor.yy320);
+ sqlite3WindowAttach(pParse, yylhsminor.yy66, yymsp[0].minor.yy255);
+ sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy66, yymsp[-2].minor.yy70);
}
- yymsp[-8].minor.yy590 = yylhsminor.yy590;
+ yymsp[-8].minor.yy66 = yylhsminor.yy66;
break;
- case 197: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
+ case 199: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */
{
- yylhsminor.yy590 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0);
- sqlite3WindowAttach(pParse, yylhsminor.yy590, yymsp[0].minor.yy483);
+ yylhsminor.yy66 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0);
+ sqlite3WindowAttach(pParse, yylhsminor.yy66, yymsp[0].minor.yy255);
}
- yymsp[-4].minor.yy590 = yylhsminor.yy590;
+ yymsp[-4].minor.yy66 = yylhsminor.yy66;
break;
- case 198: /* term ::= CTIME_KW */
+ case 200: /* term ::= CTIME_KW */
{
- yylhsminor.yy590 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0);
+ yylhsminor.yy66 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0);
}
- yymsp[0].minor.yy590 = yylhsminor.yy590;
+ yymsp[0].minor.yy66 = yylhsminor.yy66;
break;
- case 199: /* expr ::= LP nexprlist COMMA expr RP */
+ case 201: /* expr ::= LP nexprlist COMMA expr RP */
{
- ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy402, yymsp[-1].minor.yy590);
- yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
- if( yymsp[-4].minor.yy590 ){
- yymsp[-4].minor.yy590->x.pList = pList;
+ ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy70, yymsp[-1].minor.yy66);
+ yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
+ if( yymsp[-4].minor.yy66 ){
+ yymsp[-4].minor.yy66->x.pList = pList;
if( ALWAYS(pList->nExpr) ){
- yymsp[-4].minor.yy590->flags |= pList->a[0].pExpr->flags & EP_Propagate;
+ yymsp[-4].minor.yy66->flags |= pList->a[0].pExpr->flags & EP_Propagate;
}
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
}
break;
- case 200: /* expr ::= expr AND expr */
-{yymsp[-2].minor.yy590=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy590,yymsp[0].minor.yy590);}
+ case 202: /* expr ::= expr AND expr */
+{yymsp[-2].minor.yy66=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy66,yymsp[0].minor.yy66);}
break;
- case 201: /* expr ::= expr OR expr */
- case 202: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==202);
- case 203: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==203);
- case 204: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==204);
- case 205: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==205);
- case 206: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==206);
- case 207: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==207);
-{yymsp[-2].minor.yy590=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy590,yymsp[0].minor.yy590);}
+ case 203: /* expr ::= expr OR expr */
+ case 204: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==204);
+ case 205: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==205);
+ case 206: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==206);
+ case 207: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==207);
+ case 208: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==208);
+ case 209: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==209);
+{yymsp[-2].minor.yy66=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy66,yymsp[0].minor.yy66);}
break;
- case 208: /* likeop ::= NOT LIKE_KW|MATCH */
+ case 210: /* likeop ::= NOT LIKE_KW|MATCH */
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/}
break;
- case 209: /* expr ::= expr likeop expr */
+ case 211: /* expr ::= expr likeop expr */
{
ExprList *pList;
int bNot = yymsp[-1].minor.yy0.n & 0x80000000;
yymsp[-1].minor.yy0.n &= 0x7fffffff;
- pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy590);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy590);
- yymsp[-2].minor.yy590 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
- if( bNot ) yymsp[-2].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy590, 0);
- if( yymsp[-2].minor.yy590 ) yymsp[-2].minor.yy590->flags |= EP_InfixFunc;
+ pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy66);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy66);
+ yymsp[-2].minor.yy66 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
+ if( bNot ) yymsp[-2].minor.yy66 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy66, 0);
+ if( yymsp[-2].minor.yy66 ) yymsp[-2].minor.yy66->flags |= EP_InfixFunc;
}
break;
- case 210: /* expr ::= expr likeop expr ESCAPE expr */
+ case 212: /* expr ::= expr likeop expr ESCAPE expr */
{
ExprList *pList;
int bNot = yymsp[-3].minor.yy0.n & 0x80000000;
yymsp[-3].minor.yy0.n &= 0x7fffffff;
- pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy590);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy590);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy590);
- yymsp[-4].minor.yy590 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0);
- if( bNot ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0);
- if( yymsp[-4].minor.yy590 ) yymsp[-4].minor.yy590->flags |= EP_InfixFunc;
+ pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy66);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy66);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy66);
+ yymsp[-4].minor.yy66 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0);
+ if( bNot ) yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy66, 0);
+ if( yymsp[-4].minor.yy66 ) yymsp[-4].minor.yy66->flags |= EP_InfixFunc;
}
break;
- case 211: /* expr ::= expr ISNULL|NOTNULL */
-{yymsp[-1].minor.yy590 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy590,0);}
+ case 213: /* expr ::= expr ISNULL|NOTNULL */
+{yymsp[-1].minor.yy66 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy66,0);}
break;
- case 212: /* expr ::= expr NOT NULL */
-{yymsp[-2].minor.yy590 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy590,0);}
+ case 214: /* expr ::= expr NOT NULL */
+{yymsp[-2].minor.yy66 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy66,0);}
break;
- case 213: /* expr ::= expr IS expr */
+ case 215: /* expr ::= expr IS expr */
{
- yymsp[-2].minor.yy590 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy590,yymsp[0].minor.yy590);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-2].minor.yy590, TK_ISNULL);
+ yymsp[-2].minor.yy66 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy66,yymsp[0].minor.yy66);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy66, yymsp[-2].minor.yy66, TK_ISNULL);
}
break;
- case 214: /* expr ::= expr IS NOT expr */
+ case 216: /* expr ::= expr IS NOT expr */
{
- yymsp[-3].minor.yy590 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy590,yymsp[0].minor.yy590);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-3].minor.yy590, TK_NOTNULL);
+ yymsp[-3].minor.yy66 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy66,yymsp[0].minor.yy66);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy66, yymsp[-3].minor.yy66, TK_NOTNULL);
}
break;
- case 215: /* expr ::= expr IS NOT DISTINCT FROM expr */
+ case 217: /* expr ::= expr IS NOT DISTINCT FROM expr */
{
- yymsp[-5].minor.yy590 = sqlite3PExpr(pParse,TK_IS,yymsp[-5].minor.yy590,yymsp[0].minor.yy590);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-5].minor.yy590, TK_ISNULL);
+ yymsp[-5].minor.yy66 = sqlite3PExpr(pParse,TK_IS,yymsp[-5].minor.yy66,yymsp[0].minor.yy66);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy66, yymsp[-5].minor.yy66, TK_ISNULL);
}
break;
- case 216: /* expr ::= expr IS DISTINCT FROM expr */
+ case 218: /* expr ::= expr IS DISTINCT FROM expr */
{
- yymsp[-4].minor.yy590 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-4].minor.yy590,yymsp[0].minor.yy590);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-4].minor.yy590, TK_NOTNULL);
+ yymsp[-4].minor.yy66 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-4].minor.yy66,yymsp[0].minor.yy66);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy66, yymsp[-4].minor.yy66, TK_NOTNULL);
}
break;
- case 217: /* expr ::= NOT expr */
- case 218: /* expr ::= BITNOT expr */ yytestcase(yyruleno==218);
-{yymsp[-1].minor.yy590 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy590, 0);/*A-overwrites-B*/}
+ case 219: /* expr ::= NOT expr */
+ case 220: /* expr ::= BITNOT expr */ yytestcase(yyruleno==220);
+{yymsp[-1].minor.yy66 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy66, 0);/*A-overwrites-B*/}
break;
- case 219: /* expr ::= PLUS|MINUS expr */
+ case 221: /* expr ::= PLUS|MINUS expr */
{
- yymsp[-1].minor.yy590 = sqlite3PExpr(pParse, yymsp[-1].major==TK_PLUS ? TK_UPLUS : TK_UMINUS, yymsp[0].minor.yy590, 0);
- /*A-overwrites-B*/
+ Expr *p = yymsp[0].minor.yy66;
+ u8 op = yymsp[-1].major + (TK_UPLUS-TK_PLUS);
+ assert( TK_UPLUS>TK_PLUS );
+ assert( TK_UMINUS == TK_MINUS + (TK_UPLUS - TK_PLUS) );
+ if( p && p->op==TK_UPLUS ){
+ p->op = op;
+ yymsp[-1].minor.yy66 = p;
+ }else{
+ yymsp[-1].minor.yy66 = sqlite3PExpr(pParse, op, p, 0);
+ /*A-overwrites-B*/
+ }
}
break;
- case 220: /* expr ::= expr PTR expr */
+ case 222: /* expr ::= expr PTR expr */
{
- ExprList *pList = sqlite3ExprListAppend(pParse, 0, yymsp[-2].minor.yy590);
- pList = sqlite3ExprListAppend(pParse, pList, yymsp[0].minor.yy590);
- yylhsminor.yy590 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
+ ExprList *pList = sqlite3ExprListAppend(pParse, 0, yymsp[-2].minor.yy66);
+ pList = sqlite3ExprListAppend(pParse, pList, yymsp[0].minor.yy66);
+ yylhsminor.yy66 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
}
- yymsp[-2].minor.yy590 = yylhsminor.yy590;
+ yymsp[-2].minor.yy66 = yylhsminor.yy66;
break;
- case 221: /* between_op ::= BETWEEN */
- case 224: /* in_op ::= IN */ yytestcase(yyruleno==224);
-{yymsp[0].minor.yy502 = 0;}
+ case 223: /* between_op ::= BETWEEN */
+ case 226: /* in_op ::= IN */ yytestcase(yyruleno==226);
+{yymsp[0].minor.yy320 = 0;}
break;
- case 223: /* expr ::= expr between_op expr AND expr */
+ case 225: /* expr ::= expr between_op expr AND expr */
{
- ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy590);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy590);
- yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy590, 0);
- if( yymsp[-4].minor.yy590 ){
- yymsp[-4].minor.yy590->x.pList = pList;
+ ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy66);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy66);
+ yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy66, 0);
+ if( yymsp[-4].minor.yy66 ){
+ yymsp[-4].minor.yy66->x.pList = pList;
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
- if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0);
+ if( yymsp[-3].minor.yy320 ) yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy66, 0);
}
break;
- case 226: /* expr ::= expr in_op LP exprlist RP */
+ case 228: /* expr ::= expr in_op LP exprlist RP */
{
- if( yymsp[-1].minor.yy402==0 ){
+ if( yymsp[-1].minor.yy70==0 ){
/* Expressions of the form
**
** expr1 IN ()
@@ -178206,212 +179820,212 @@ static YYACTIONTYPE yy_reduce(
** simplify to constants 0 (false) and 1 (true), respectively,
** regardless of the value of expr1.
*/
- sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy590);
- yymsp[-4].minor.yy590 = sqlite3Expr(pParse->db, TK_STRING, yymsp[-3].minor.yy502 ? "true" : "false");
- if( yymsp[-4].minor.yy590 ) sqlite3ExprIdToTrueFalse(yymsp[-4].minor.yy590);
+ sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy66);
+ yymsp[-4].minor.yy66 = sqlite3Expr(pParse->db, TK_STRING, yymsp[-3].minor.yy320 ? "true" : "false");
+ if( yymsp[-4].minor.yy66 ) sqlite3ExprIdToTrueFalse(yymsp[-4].minor.yy66);
}else{
- Expr *pRHS = yymsp[-1].minor.yy402->a[0].pExpr;
- if( yymsp[-1].minor.yy402->nExpr==1 && sqlite3ExprIsConstant(pRHS) && yymsp[-4].minor.yy590->op!=TK_VECTOR ){
- yymsp[-1].minor.yy402->a[0].pExpr = 0;
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy402);
+ Expr *pRHS = yymsp[-1].minor.yy70->a[0].pExpr;
+ if( yymsp[-1].minor.yy70->nExpr==1 && sqlite3ExprIsConstant(pParse,pRHS) && yymsp[-4].minor.yy66->op!=TK_VECTOR ){
+ yymsp[-1].minor.yy70->a[0].pExpr = 0;
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy70);
pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0);
- yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy590, pRHS);
- }else if( yymsp[-1].minor.yy402->nExpr==1 && pRHS->op==TK_SELECT ){
- yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, pRHS->x.pSelect);
+ yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy66, pRHS);
+ }else if( yymsp[-1].minor.yy70->nExpr==1 && pRHS->op==TK_SELECT ){
+ yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy66, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy66, pRHS->x.pSelect);
pRHS->x.pSelect = 0;
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy402);
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy70);
}else{
- yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0);
- if( yymsp[-4].minor.yy590==0 ){
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy402);
- }else if( yymsp[-4].minor.yy590->pLeft->op==TK_VECTOR ){
- int nExpr = yymsp[-4].minor.yy590->pLeft->x.pList->nExpr;
- Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, yymsp[-1].minor.yy402);
+ yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy66, 0);
+ if( yymsp[-4].minor.yy66==0 ){
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy70);
+ }else if( yymsp[-4].minor.yy66->pLeft->op==TK_VECTOR ){
+ int nExpr = yymsp[-4].minor.yy66->pLeft->x.pList->nExpr;
+ Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, yymsp[-1].minor.yy70);
if( pSelectRHS ){
parserDoubleLinkSelect(pParse, pSelectRHS);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, pSelectRHS);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy66, pSelectRHS);
}
}else{
- yymsp[-4].minor.yy590->x.pList = yymsp[-1].minor.yy402;
- sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy590);
+ yymsp[-4].minor.yy66->x.pList = yymsp[-1].minor.yy70;
+ sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy66);
}
}
- if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0);
+ if( yymsp[-3].minor.yy320 ) yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy66, 0);
}
}
break;
- case 227: /* expr ::= LP select RP */
+ case 229: /* expr ::= LP select RP */
{
- yymsp[-2].minor.yy590 = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy590, yymsp[-1].minor.yy637);
+ yymsp[-2].minor.yy66 = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy66, yymsp[-1].minor.yy599);
}
break;
- case 228: /* expr ::= expr in_op LP select RP */
+ case 230: /* expr ::= expr in_op LP select RP */
{
- yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, yymsp[-1].minor.yy637);
- if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0);
+ yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy66, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy66, yymsp[-1].minor.yy599);
+ if( yymsp[-3].minor.yy320 ) yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy66, 0);
}
break;
- case 229: /* expr ::= expr in_op nm dbnm paren_exprlist */
+ case 231: /* expr ::= expr in_op nm dbnm paren_exprlist */
{
SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);
Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
- if( yymsp[0].minor.yy402 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy402);
- yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, pSelect);
- if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0);
+ if( yymsp[0].minor.yy70 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy70);
+ yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy66, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy66, pSelect);
+ if( yymsp[-3].minor.yy320 ) yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy66, 0);
}
break;
- case 230: /* expr ::= EXISTS LP select RP */
+ case 232: /* expr ::= EXISTS LP select RP */
{
Expr *p;
- p = yymsp[-3].minor.yy590 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
- sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy637);
+ p = yymsp[-3].minor.yy66 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
+ sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy599);
}
break;
- case 231: /* expr ::= CASE case_operand case_exprlist case_else END */
+ case 233: /* expr ::= CASE case_operand case_exprlist case_else END */
{
- yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy590, 0);
- if( yymsp[-4].minor.yy590 ){
- yymsp[-4].minor.yy590->x.pList = yymsp[-1].minor.yy590 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy402,yymsp[-1].minor.yy590) : yymsp[-2].minor.yy402;
- sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy590);
+ yymsp[-4].minor.yy66 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy66, 0);
+ if( yymsp[-4].minor.yy66 ){
+ yymsp[-4].minor.yy66->x.pList = yymsp[-1].minor.yy66 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy70,yymsp[-1].minor.yy66) : yymsp[-2].minor.yy70;
+ sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy66);
}else{
- sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy402);
- sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy590);
+ sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy70);
+ sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy66);
}
}
break;
- case 232: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ case 234: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
{
- yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402, yymsp[-2].minor.yy590);
- yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402, yymsp[0].minor.yy590);
+ yymsp[-4].minor.yy70 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy70, yymsp[-2].minor.yy66);
+ yymsp[-4].minor.yy70 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy70, yymsp[0].minor.yy66);
}
break;
- case 233: /* case_exprlist ::= WHEN expr THEN expr */
+ case 235: /* case_exprlist ::= WHEN expr THEN expr */
{
- yymsp[-3].minor.yy402 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy590);
- yymsp[-3].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy402, yymsp[0].minor.yy590);
+ yymsp[-3].minor.yy70 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy66);
+ yymsp[-3].minor.yy70 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy70, yymsp[0].minor.yy66);
}
break;
- case 238: /* nexprlist ::= nexprlist COMMA expr */
-{yymsp[-2].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy402,yymsp[0].minor.yy590);}
+ case 240: /* nexprlist ::= nexprlist COMMA expr */
+{yymsp[-2].minor.yy70 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy70,yymsp[0].minor.yy66);}
break;
- case 239: /* nexprlist ::= expr */
-{yymsp[0].minor.yy402 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy590); /*A-overwrites-Y*/}
+ case 241: /* nexprlist ::= expr */
+{yymsp[0].minor.yy70 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy66); /*A-overwrites-Y*/}
break;
- case 241: /* paren_exprlist ::= LP exprlist RP */
- case 248: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==248);
-{yymsp[-2].minor.yy402 = yymsp[-1].minor.yy402;}
+ case 243: /* paren_exprlist ::= LP exprlist RP */
+ case 250: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==250);
+{yymsp[-2].minor.yy70 = yymsp[-1].minor.yy70;}
break;
- case 242: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm indextype ON nm LP sortlist RP where_opt */
+ case 244: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm indextype ON nm LP sortlist RP where_opt */
{
u8 idxType = SQLITE_IDXTYPE_APPDEF;
sqlite3CreateIndex(pParse, &yymsp[-8].minor.yy0, &yymsp[-7].minor.yy0,
- sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy402, yymsp[-11].minor.yy502,
- &yymsp[-12].minor.yy0, yymsp[0].minor.yy590, SQLITE_SO_ASC, yymsp[-9].minor.yy502, idxType, yymsp[-6].minor.yy421.pUsing);
+ sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy70, yymsp[-11].minor.yy320,
+ &yymsp[-12].minor.yy0, yymsp[0].minor.yy66, SQLITE_SO_ASC, yymsp[-9].minor.yy320, idxType, yymsp[-6].minor.yy497.pUsing);
if( IN_RENAME_OBJECT && pParse->pNewIndex ){
sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &yymsp[-4].minor.yy0);
}
}
break;
- case 243: /* uniqueflag ::= UNIQUE */
- case 287: /* raisetype ::= ABORT */ yytestcase(yyruleno==287);
-{yymsp[0].minor.yy502 = OE_Abort;}
+ case 245: /* uniqueflag ::= UNIQUE */
+ case 289: /* raisetype ::= ABORT */ yytestcase(yyruleno==289);
+{yymsp[0].minor.yy320 = OE_Abort;}
break;
- case 244: /* uniqueflag ::= */
-{yymsp[1].minor.yy502 = OE_None;}
+ case 246: /* uniqueflag ::= */
+{yymsp[1].minor.yy320 = OE_None;}
break;
- case 245: /* indextype ::= USING idlist */
-{yymsp[-1].minor.yy421.pOn = 0; yymsp[-1].minor.yy421.pUsing = yymsp[0].minor.yy204;}
+ case 247: /* indextype ::= USING idlist */
+{yymsp[-1].minor.yy497.pOn = 0; yymsp[-1].minor.yy497.pUsing = yymsp[0].minor.yy332;}
break;
- case 249: /* eidlist ::= eidlist COMMA nm collate sortorder */
+ case 251: /* eidlist ::= eidlist COMMA nm collate sortorder */
{
- yymsp[-4].minor.yy402 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy402, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy502, yymsp[0].minor.yy502);
+ yymsp[-4].minor.yy70 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy70, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy320, yymsp[0].minor.yy320);
}
break;
- case 250: /* eidlist ::= nm collate sortorder */
+ case 252: /* eidlist ::= nm collate sortorder */
{
- yymsp[-2].minor.yy402 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy502, yymsp[0].minor.yy502); /*A-overwrites-Y*/
+ yymsp[-2].minor.yy70 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy320, yymsp[0].minor.yy320); /*A-overwrites-Y*/
}
break;
- case 253: /* cmd ::= DROP INDEX ifexists fullname */
-{sqlite3DropIndex(pParse, yymsp[0].minor.yy563, yymsp[-1].minor.yy502);}
+ case 255: /* cmd ::= DROP INDEX ifexists fullname */
+{sqlite3DropIndex(pParse, yymsp[0].minor.yy595, yymsp[-1].minor.yy320);}
break;
- case 254: /* cmd ::= VACUUM vinto */
-{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy590);}
+ case 256: /* cmd ::= VACUUM vinto */
+{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy66);}
break;
- case 255: /* cmd ::= VACUUM nm vinto */
-{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy590);}
+ case 257: /* cmd ::= VACUUM nm vinto */
+{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy66);}
break;
- case 258: /* cmd ::= PRAGMA nm dbnm */
+ case 260: /* cmd ::= PRAGMA nm dbnm */
{sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);}
break;
- case 259: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
+ case 261: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);}
break;
- case 260: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ case 262: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);}
break;
- case 261: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
+ case 263: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);}
break;
- case 262: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ case 264: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);}
break;
- case 265: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ case 267: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
{
Token all;
all.z = yymsp[-3].minor.yy0.z;
all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
- sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy319, &all);
+ sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy243, &all);
}
break;
- case 266: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ case 268: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
{
- sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy502, yymsp[-4].minor.yy28.a, yymsp[-4].minor.yy28.b, yymsp[-2].minor.yy563, yymsp[0].minor.yy590, yymsp[-10].minor.yy502, yymsp[-8].minor.yy502);
+ sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy320, yymsp[-4].minor.yy158.a, yymsp[-4].minor.yy158.b, yymsp[-2].minor.yy595, yymsp[0].minor.yy66, yymsp[-10].minor.yy320, yymsp[-8].minor.yy320);
yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/
}
break;
- case 267: /* trigger_time ::= BEFORE|AFTER */
-{ yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-X*/ }
+ case 269: /* trigger_time ::= BEFORE|AFTER */
+{ yymsp[0].minor.yy320 = yymsp[0].major; /*A-overwrites-X*/ }
break;
- case 268: /* trigger_time ::= INSTEAD OF */
-{ yymsp[-1].minor.yy502 = TK_INSTEAD;}
+ case 270: /* trigger_time ::= INSTEAD OF */
+{ yymsp[-1].minor.yy320 = TK_INSTEAD;}
break;
- case 269: /* trigger_time ::= */
-{ yymsp[1].minor.yy502 = TK_BEFORE; }
+ case 271: /* trigger_time ::= */
+{ yymsp[1].minor.yy320 = TK_BEFORE; }
break;
- case 270: /* trigger_event ::= DELETE|INSERT */
- case 271: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==271);
-{yymsp[0].minor.yy28.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy28.b = 0;}
+ case 272: /* trigger_event ::= DELETE|INSERT */
+ case 273: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==273);
+{yymsp[0].minor.yy158.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy158.b = 0;}
break;
- case 272: /* trigger_event ::= UPDATE OF idlist */
-{yymsp[-2].minor.yy28.a = TK_UPDATE; yymsp[-2].minor.yy28.b = yymsp[0].minor.yy204;}
+ case 274: /* trigger_event ::= UPDATE OF idlist */
+{yymsp[-2].minor.yy158.a = TK_UPDATE; yymsp[-2].minor.yy158.b = yymsp[0].minor.yy332;}
break;
- case 273: /* when_clause ::= */
- case 292: /* key_opt ::= */ yytestcase(yyruleno==292);
-{ yymsp[1].minor.yy590 = 0; }
+ case 275: /* when_clause ::= */
+ case 294: /* key_opt ::= */ yytestcase(yyruleno==294);
+{ yymsp[1].minor.yy66 = 0; }
break;
- case 274: /* when_clause ::= WHEN expr */
- case 293: /* key_opt ::= KEY expr */ yytestcase(yyruleno==293);
-{ yymsp[-1].minor.yy590 = yymsp[0].minor.yy590; }
+ case 276: /* when_clause ::= WHEN expr */
+ case 295: /* key_opt ::= KEY expr */ yytestcase(yyruleno==295);
+{ yymsp[-1].minor.yy66 = yymsp[0].minor.yy66; }
break;
- case 275: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ case 277: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
{
- assert( yymsp[-2].minor.yy319!=0 );
- yymsp[-2].minor.yy319->pLast->pNext = yymsp[-1].minor.yy319;
- yymsp[-2].minor.yy319->pLast = yymsp[-1].minor.yy319;
+ assert( yymsp[-2].minor.yy243!=0 );
+ yymsp[-2].minor.yy243->pLast->pNext = yymsp[-1].minor.yy243;
+ yymsp[-2].minor.yy243->pLast = yymsp[-1].minor.yy243;
}
break;
- case 276: /* trigger_cmd_list ::= trigger_cmd SEMI */
+ case 278: /* trigger_cmd_list ::= trigger_cmd SEMI */
{
- assert( yymsp[-1].minor.yy319!=0 );
- yymsp[-1].minor.yy319->pLast = yymsp[-1].minor.yy319;
+ assert( yymsp[-1].minor.yy243!=0 );
+ yymsp[-1].minor.yy243->pLast = yymsp[-1].minor.yy243;
}
break;
- case 277: /* trnm ::= nm DOT nm */
+ case 279: /* trnm ::= nm DOT nm */
{
yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;
sqlite3ErrorMsg(pParse,
@@ -178419,373 +180033,383 @@ static YYACTIONTYPE yy_reduce(
"statements within triggers");
}
break;
- case 278: /* tridxby ::= INDEXED BY nm */
+ case 280: /* tridxby ::= INDEXED BY nm */
{
sqlite3ErrorMsg(pParse,
"the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
break;
- case 279: /* tridxby ::= NOT INDEXED */
+ case 281: /* tridxby ::= NOT INDEXED */
{
sqlite3ErrorMsg(pParse,
"the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
break;
- case 280: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
-{yylhsminor.yy319 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy563, yymsp[-3].minor.yy402, yymsp[-1].minor.yy590, yymsp[-7].minor.yy502, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy342);}
- yymsp[-8].minor.yy319 = yylhsminor.yy319;
+ case 282: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
+{yylhsminor.yy243 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy595, yymsp[-3].minor.yy70, yymsp[-1].minor.yy66, yymsp[-7].minor.yy320, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy400);}
+ yymsp[-8].minor.yy243 = yylhsminor.yy243;
break;
- case 281: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ case 283: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
{
- yylhsminor.yy319 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy204,yymsp[-2].minor.yy637,yymsp[-6].minor.yy502,yymsp[-1].minor.yy403,yymsp[-7].minor.yy342,yymsp[0].minor.yy342);/*yylhsminor.yy319-overwrites-yymsp[-6].minor.yy502*/
+ yylhsminor.yy243 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy332,yymsp[-2].minor.yy599,yymsp[-6].minor.yy320,yymsp[-1].minor.yy186,yymsp[-7].minor.yy400,yymsp[0].minor.yy400);/*yylhsminor.yy243-overwrites-yymsp[-6].minor.yy320*/
}
- yymsp[-7].minor.yy319 = yylhsminor.yy319;
+ yymsp[-7].minor.yy243 = yylhsminor.yy243;
break;
- case 282: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
-{yylhsminor.yy319 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy590, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy342);}
- yymsp[-5].minor.yy319 = yylhsminor.yy319;
+ case 284: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+{yylhsminor.yy243 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy66, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy400);}
+ yymsp[-5].minor.yy243 = yylhsminor.yy243;
break;
- case 283: /* trigger_cmd ::= scanpt select scanpt */
-{yylhsminor.yy319 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy637, yymsp[-2].minor.yy342, yymsp[0].minor.yy342); /*yylhsminor.yy319-overwrites-yymsp[-1].minor.yy637*/}
- yymsp[-2].minor.yy319 = yylhsminor.yy319;
+ case 285: /* trigger_cmd ::= scanpt select scanpt */
+{yylhsminor.yy243 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy599, yymsp[-2].minor.yy400, yymsp[0].minor.yy400); /*yylhsminor.yy243-overwrites-yymsp[-1].minor.yy599*/}
+ yymsp[-2].minor.yy243 = yylhsminor.yy243;
break;
- case 284: /* expr ::= RAISE LP IGNORE RP */
+ case 286: /* expr ::= RAISE LP IGNORE RP */
{
- yymsp[-3].minor.yy590 = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
- if( yymsp[-3].minor.yy590 ){
- yymsp[-3].minor.yy590->affExpr = OE_Ignore;
+ yymsp[-3].minor.yy66 = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
+ if( yymsp[-3].minor.yy66 ){
+ yymsp[-3].minor.yy66->affExpr = OE_Ignore;
}
}
break;
- case 285: /* expr ::= RAISE LP raisetype COMMA nm RP */
+ case 287: /* expr ::= RAISE LP raisetype COMMA nm RP */
{
- yymsp[-5].minor.yy590 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1);
- if( yymsp[-5].minor.yy590 ) {
- yymsp[-5].minor.yy590->affExpr = (char)yymsp[-3].minor.yy502;
+ yymsp[-5].minor.yy66 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1);
+ if( yymsp[-5].minor.yy66 ) {
+ yymsp[-5].minor.yy66->affExpr = (char)yymsp[-3].minor.yy320;
}
}
break;
- case 286: /* raisetype ::= ROLLBACK */
-{yymsp[0].minor.yy502 = OE_Rollback;}
+ case 288: /* raisetype ::= ROLLBACK */
+{yymsp[0].minor.yy320 = OE_Rollback;}
break;
- case 288: /* raisetype ::= FAIL */
-{yymsp[0].minor.yy502 = OE_Fail;}
+ case 290: /* raisetype ::= FAIL */
+{yymsp[0].minor.yy320 = OE_Fail;}
break;
- case 289: /* cmd ::= DROP TRIGGER ifexists fullname */
+ case 291: /* cmd ::= DROP TRIGGER ifexists fullname */
{
- sqlite3DropTrigger(pParse,yymsp[0].minor.yy563,yymsp[-1].minor.yy502);
+ sqlite3DropTrigger(pParse,yymsp[0].minor.yy595,yymsp[-1].minor.yy320);
}
break;
- case 290: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ case 292: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
{
- sqlite3Attach(pParse, yymsp[-3].minor.yy590, yymsp[-1].minor.yy590, yymsp[0].minor.yy590);
+ sqlite3Attach(pParse, yymsp[-3].minor.yy66, yymsp[-1].minor.yy66, yymsp[0].minor.yy66);
}
break;
- case 291: /* cmd ::= DETACH database_kw_opt expr */
+ case 293: /* cmd ::= DETACH database_kw_opt expr */
{
- sqlite3Detach(pParse, yymsp[0].minor.yy590);
+ sqlite3Detach(pParse, yymsp[0].minor.yy66);
}
break;
- case 294: /* cmd ::= REINDEX */
+ case 296: /* cmd ::= REINDEX */
{sqlite3Reindex(pParse, 0, 0);}
break;
- case 295: /* cmd ::= REINDEX nm dbnm */
+ case 297: /* cmd ::= REINDEX nm dbnm */
{sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
break;
- case 296: /* cmd ::= ANALYZE */
+ case 298: /* cmd ::= ANALYZE */
{sqlite3Analyze(pParse, 0, 0);}
break;
- case 297: /* cmd ::= ANALYZE nm dbnm */
+ case 299: /* cmd ::= ANALYZE nm dbnm */
{sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
break;
- case 298: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
+ case 300: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
{
- sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy563,&yymsp[0].minor.yy0);
+ sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy595,&yymsp[0].minor.yy0);
}
break;
- case 299: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ case 301: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
{
yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n;
sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0);
}
break;
- case 300: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
+ case 302: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
{
- sqlite3AlterDropColumn(pParse, yymsp[-3].minor.yy563, &yymsp[0].minor.yy0);
+ sqlite3AlterDropColumn(pParse, yymsp[-3].minor.yy595, &yymsp[0].minor.yy0);
}
break;
- case 301: /* add_column_fullname ::= fullname */
+ case 303: /* add_column_fullname ::= fullname */
{
disableLookaside(pParse);
- sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy563);
+ sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy595);
}
break;
- case 302: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ case 304: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
{
- sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy563, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
+ sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy595, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
}
break;
- case 303: /* cmd ::= ALTER TABLE fullname ALTER COLUMNKW columnname TO columnname carglist */
+ case 305: /* cmd ::= ALTER TABLE fullname ALTER COLUMNKW columnname TO columnname carglist */
{
int definitionLength = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n;
- libsqlAlterAlterColumn(pParse, yymsp[-6].minor.yy563, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, definitionLength);
+ libsqlAlterAlterColumn(pParse, yymsp[-6].minor.yy595, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, definitionLength);
}
break;
- case 304: /* cmd ::= create_vtab */
+ case 306: /* cmd ::= create_vtab */
{sqlite3VtabFinishParse(pParse,0);}
break;
- case 305: /* cmd ::= create_vtab LP vtabarglist RP */
+ case 307: /* cmd ::= create_vtab LP vtabarglist RP */
{sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);}
break;
- case 306: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ case 308: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
{
- sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy502);
+ sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy320);
}
break;
- case 307: /* vtabarg ::= */
+ case 309: /* vtabarg ::= */
{sqlite3VtabArgInit(pParse);}
break;
- case 308: /* vtabargtoken ::= ANY */
- case 309: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==309);
- case 310: /* lp ::= LP */ yytestcase(yyruleno==310);
+ case 310: /* vtabargtoken ::= ANY */
+ case 311: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==311);
+ case 312: /* lp ::= LP */ yytestcase(yyruleno==312);
{sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);}
break;
- case 311: /* with ::= WITH wqlist */
- case 312: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==312);
-{ sqlite3WithPush(pParse, yymsp[0].minor.yy125, 1); }
+ case 313: /* with ::= WITH wqlist */
+ case 314: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==314);
+{ sqlite3WithPush(pParse, yymsp[0].minor.yy523, 1); }
break;
- case 313: /* wqas ::= AS */
-{yymsp[0].minor.yy444 = M10d_Any;}
+ case 315: /* wqas ::= AS */
+{yymsp[0].minor.yy390 = M10d_Any;}
break;
- case 314: /* wqas ::= AS MATERIALIZED */
-{yymsp[-1].minor.yy444 = M10d_Yes;}
+ case 316: /* wqas ::= AS MATERIALIZED */
+{yymsp[-1].minor.yy390 = M10d_Yes;}
break;
- case 315: /* wqas ::= AS NOT MATERIALIZED */
-{yymsp[-2].minor.yy444 = M10d_No;}
+ case 317: /* wqas ::= AS NOT MATERIALIZED */
+{yymsp[-2].minor.yy390 = M10d_No;}
break;
- case 316: /* wqitem ::= nm eidlist_opt wqas LP select RP */
+ case 318: /* wqitem ::= withnm eidlist_opt wqas LP select RP */
{
- yymsp[-5].minor.yy361 = sqlite3CteNew(pParse, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy402, yymsp[-1].minor.yy637, yymsp[-3].minor.yy444); /*A-overwrites-X*/
+ yymsp[-5].minor.yy487 = sqlite3CteNew(pParse, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy70, yymsp[-1].minor.yy599, yymsp[-3].minor.yy390); /*A-overwrites-X*/
}
break;
- case 317: /* wqlist ::= wqitem */
+ case 319: /* withnm ::= nm */
+{pParse->bHasWith = 1;}
+ break;
+ case 320: /* wqlist ::= wqitem */
{
- yymsp[0].minor.yy125 = sqlite3WithAdd(pParse, 0, yymsp[0].minor.yy361); /*A-overwrites-X*/
+ yymsp[0].minor.yy523 = sqlite3WithAdd(pParse, 0, yymsp[0].minor.yy487); /*A-overwrites-X*/
}
break;
- case 318: /* wqlist ::= wqlist COMMA wqitem */
+ case 321: /* wqlist ::= wqlist COMMA wqitem */
{
- yymsp[-2].minor.yy125 = sqlite3WithAdd(pParse, yymsp[-2].minor.yy125, yymsp[0].minor.yy361);
+ yymsp[-2].minor.yy523 = sqlite3WithAdd(pParse, yymsp[-2].minor.yy523, yymsp[0].minor.yy487);
}
break;
- case 319: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ case 322: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */
{
- assert( yymsp[0].minor.yy483!=0 );
- sqlite3WindowChain(pParse, yymsp[0].minor.yy483, yymsp[-2].minor.yy483);
- yymsp[0].minor.yy483->pNextWin = yymsp[-2].minor.yy483;
- yylhsminor.yy483 = yymsp[0].minor.yy483;
+ assert( yymsp[0].minor.yy255!=0 );
+ sqlite3WindowChain(pParse, yymsp[0].minor.yy255, yymsp[-2].minor.yy255);
+ yymsp[0].minor.yy255->pNextWin = yymsp[-2].minor.yy255;
+ yylhsminor.yy255 = yymsp[0].minor.yy255;
}
- yymsp[-2].minor.yy483 = yylhsminor.yy483;
+ yymsp[-2].minor.yy255 = yylhsminor.yy255;
break;
- case 320: /* windowdefn ::= nm AS LP window RP */
+ case 323: /* windowdefn ::= nm AS LP window RP */
{
- if( ALWAYS(yymsp[-1].minor.yy483) ){
- yymsp[-1].minor.yy483->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n);
+ if( ALWAYS(yymsp[-1].minor.yy255) ){
+ yymsp[-1].minor.yy255->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n);
}
- yylhsminor.yy483 = yymsp[-1].minor.yy483;
+ yylhsminor.yy255 = yymsp[-1].minor.yy255;
}
- yymsp[-4].minor.yy483 = yylhsminor.yy483;
+ yymsp[-4].minor.yy255 = yylhsminor.yy255;
break;
- case 321: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ case 324: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */
{
- yymsp[-4].minor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, yymsp[-2].minor.yy402, yymsp[-1].minor.yy402, 0);
+ yymsp[-4].minor.yy255 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy255, yymsp[-2].minor.yy70, yymsp[-1].minor.yy70, 0);
}
break;
- case 322: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ case 325: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
{
- yylhsminor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, yymsp[-2].minor.yy402, yymsp[-1].minor.yy402, &yymsp[-5].minor.yy0);
+ yylhsminor.yy255 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy255, yymsp[-2].minor.yy70, yymsp[-1].minor.yy70, &yymsp[-5].minor.yy0);
}
- yymsp[-5].minor.yy483 = yylhsminor.yy483;
+ yymsp[-5].minor.yy255 = yylhsminor.yy255;
break;
- case 323: /* window ::= ORDER BY sortlist frame_opt */
+ case 326: /* window ::= ORDER BY sortlist frame_opt */
{
- yymsp[-3].minor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, 0, yymsp[-1].minor.yy402, 0);
+ yymsp[-3].minor.yy255 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy255, 0, yymsp[-1].minor.yy70, 0);
}
break;
- case 324: /* window ::= nm ORDER BY sortlist frame_opt */
+ case 327: /* window ::= nm ORDER BY sortlist frame_opt */
{
- yylhsminor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, 0, yymsp[-1].minor.yy402, &yymsp[-4].minor.yy0);
+ yylhsminor.yy255 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy255, 0, yymsp[-1].minor.yy70, &yymsp[-4].minor.yy0);
}
- yymsp[-4].minor.yy483 = yylhsminor.yy483;
+ yymsp[-4].minor.yy255 = yylhsminor.yy255;
break;
- case 325: /* window ::= nm frame_opt */
+ case 328: /* window ::= nm frame_opt */
{
- yylhsminor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, 0, 0, &yymsp[-1].minor.yy0);
+ yylhsminor.yy255 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy255, 0, 0, &yymsp[-1].minor.yy0);
}
- yymsp[-1].minor.yy483 = yylhsminor.yy483;
+ yymsp[-1].minor.yy255 = yylhsminor.yy255;
break;
- case 326: /* frame_opt ::= */
+ case 329: /* frame_opt ::= */
{
- yymsp[1].minor.yy483 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0);
+ yymsp[1].minor.yy255 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0);
}
break;
- case 327: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ case 330: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
{
- yylhsminor.yy483 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy502, yymsp[-1].minor.yy205.eType, yymsp[-1].minor.yy205.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy444);
+ yylhsminor.yy255 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy320, yymsp[-1].minor.yy417.eType, yymsp[-1].minor.yy417.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy390);
}
- yymsp[-2].minor.yy483 = yylhsminor.yy483;
+ yymsp[-2].minor.yy255 = yylhsminor.yy255;
break;
- case 328: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ case 331: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
{
- yylhsminor.yy483 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy502, yymsp[-3].minor.yy205.eType, yymsp[-3].minor.yy205.pExpr, yymsp[-1].minor.yy205.eType, yymsp[-1].minor.yy205.pExpr, yymsp[0].minor.yy444);
+ yylhsminor.yy255 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy320, yymsp[-3].minor.yy417.eType, yymsp[-3].minor.yy417.pExpr, yymsp[-1].minor.yy417.eType, yymsp[-1].minor.yy417.pExpr, yymsp[0].minor.yy390);
}
- yymsp[-5].minor.yy483 = yylhsminor.yy483;
+ yymsp[-5].minor.yy255 = yylhsminor.yy255;
break;
- case 330: /* frame_bound_s ::= frame_bound */
- case 332: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==332);
-{yylhsminor.yy205 = yymsp[0].minor.yy205;}
- yymsp[0].minor.yy205 = yylhsminor.yy205;
+ case 333: /* frame_bound_s ::= frame_bound */
+ case 335: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==335);
+{yylhsminor.yy417 = yymsp[0].minor.yy417;}
+ yymsp[0].minor.yy417 = yylhsminor.yy417;
break;
- case 331: /* frame_bound_s ::= UNBOUNDED PRECEDING */
- case 333: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==333);
- case 335: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==335);
-{yylhsminor.yy205.eType = yymsp[-1].major; yylhsminor.yy205.pExpr = 0;}
- yymsp[-1].minor.yy205 = yylhsminor.yy205;
+ case 334: /* frame_bound_s ::= UNBOUNDED PRECEDING */
+ case 336: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==336);
+ case 338: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==338);
+{yylhsminor.yy417.eType = yymsp[-1].major; yylhsminor.yy417.pExpr = 0;}
+ yymsp[-1].minor.yy417 = yylhsminor.yy417;
break;
- case 334: /* frame_bound ::= expr PRECEDING|FOLLOWING */
-{yylhsminor.yy205.eType = yymsp[0].major; yylhsminor.yy205.pExpr = yymsp[-1].minor.yy590;}
- yymsp[-1].minor.yy205 = yylhsminor.yy205;
+ case 337: /* frame_bound ::= expr PRECEDING|FOLLOWING */
+{yylhsminor.yy417.eType = yymsp[0].major; yylhsminor.yy417.pExpr = yymsp[-1].minor.yy66;}
+ yymsp[-1].minor.yy417 = yylhsminor.yy417;
break;
- case 336: /* frame_exclude_opt ::= */
-{yymsp[1].minor.yy444 = 0;}
+ case 339: /* frame_exclude_opt ::= */
+{yymsp[1].minor.yy390 = 0;}
break;
- case 337: /* frame_exclude_opt ::= EXCLUDE frame_exclude */
-{yymsp[-1].minor.yy444 = yymsp[0].minor.yy444;}
+ case 340: /* frame_exclude_opt ::= EXCLUDE frame_exclude */
+{yymsp[-1].minor.yy390 = yymsp[0].minor.yy390;}
break;
- case 338: /* frame_exclude ::= NO OTHERS */
- case 339: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==339);
-{yymsp[-1].minor.yy444 = yymsp[-1].major; /*A-overwrites-X*/}
+ case 341: /* frame_exclude ::= NO OTHERS */
+ case 342: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==342);
+{yymsp[-1].minor.yy390 = yymsp[-1].major; /*A-overwrites-X*/}
break;
- case 340: /* frame_exclude ::= GROUP|TIES */
-{yymsp[0].minor.yy444 = yymsp[0].major; /*A-overwrites-X*/}
+ case 343: /* frame_exclude ::= GROUP|TIES */
+{yymsp[0].minor.yy390 = yymsp[0].major; /*A-overwrites-X*/}
break;
- case 341: /* window_clause ::= WINDOW windowdefn_list */
-{ yymsp[-1].minor.yy483 = yymsp[0].minor.yy483; }
+ case 344: /* window_clause ::= WINDOW windowdefn_list */
+{ yymsp[-1].minor.yy255 = yymsp[0].minor.yy255; }
break;
- case 342: /* filter_over ::= filter_clause over_clause */
+ case 345: /* filter_over ::= filter_clause over_clause */
{
- if( yymsp[0].minor.yy483 ){
- yymsp[0].minor.yy483->pFilter = yymsp[-1].minor.yy590;
+ if( yymsp[0].minor.yy255 ){
+ yymsp[0].minor.yy255->pFilter = yymsp[-1].minor.yy66;
}else{
- sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy590);
+ sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy66);
}
- yylhsminor.yy483 = yymsp[0].minor.yy483;
+ yylhsminor.yy255 = yymsp[0].minor.yy255;
}
- yymsp[-1].minor.yy483 = yylhsminor.yy483;
+ yymsp[-1].minor.yy255 = yylhsminor.yy255;
break;
- case 343: /* filter_over ::= over_clause */
+ case 346: /* filter_over ::= over_clause */
{
- yylhsminor.yy483 = yymsp[0].minor.yy483;
+ yylhsminor.yy255 = yymsp[0].minor.yy255;
}
- yymsp[0].minor.yy483 = yylhsminor.yy483;
+ yymsp[0].minor.yy255 = yylhsminor.yy255;
break;
- case 344: /* filter_over ::= filter_clause */
+ case 347: /* filter_over ::= filter_clause */
{
- yylhsminor.yy483 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
- if( yylhsminor.yy483 ){
- yylhsminor.yy483->eFrmType = TK_FILTER;
- yylhsminor.yy483->pFilter = yymsp[0].minor.yy590;
+ yylhsminor.yy255 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
+ if( yylhsminor.yy255 ){
+ yylhsminor.yy255->eFrmType = TK_FILTER;
+ yylhsminor.yy255->pFilter = yymsp[0].minor.yy66;
}else{
- sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy590);
+ sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy66);
}
}
- yymsp[0].minor.yy483 = yylhsminor.yy483;
+ yymsp[0].minor.yy255 = yylhsminor.yy255;
break;
- case 345: /* over_clause ::= OVER LP window RP */
+ case 348: /* over_clause ::= OVER LP window RP */
{
- yymsp[-3].minor.yy483 = yymsp[-1].minor.yy483;
- assert( yymsp[-3].minor.yy483!=0 );
+ yymsp[-3].minor.yy255 = yymsp[-1].minor.yy255;
+ assert( yymsp[-3].minor.yy255!=0 );
}
break;
- case 346: /* over_clause ::= OVER nm */
+ case 349: /* over_clause ::= OVER nm */
{
- yymsp[-1].minor.yy483 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
- if( yymsp[-1].minor.yy483 ){
- yymsp[-1].minor.yy483->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n);
+ yymsp[-1].minor.yy255 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
+ if( yymsp[-1].minor.yy255 ){
+ yymsp[-1].minor.yy255->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n);
}
}
break;
- case 347: /* filter_clause ::= FILTER LP WHERE expr RP */
-{ yymsp[-4].minor.yy590 = yymsp[-1].minor.yy590; }
+ case 350: /* filter_clause ::= FILTER LP WHERE expr RP */
+{ yymsp[-4].minor.yy66 = yymsp[-1].minor.yy66; }
+ break;
+ case 351: /* term ::= QNUMBER */
+{
+ yylhsminor.yy66=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0);
+ sqlite3DequoteNumber(pParse, yylhsminor.yy66);
+}
+ yymsp[0].minor.yy66 = yylhsminor.yy66;
break;
default:
- /* (348) input ::= cmdlist */ yytestcase(yyruleno==348);
- /* (349) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==349);
- /* (350) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=350);
- /* (351) ecmd ::= SEMI */ yytestcase(yyruleno==351);
- /* (352) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==352);
- /* (353) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=353);
- /* (354) trans_opt ::= */ yytestcase(yyruleno==354);
- /* (355) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==355);
- /* (356) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==356);
- /* (357) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==357);
- /* (358) savepoint_opt ::= */ yytestcase(yyruleno==358);
- /* (359) cmd ::= create_table create_table_args */ yytestcase(yyruleno==359);
- /* (360) table_option_set ::= table_option (OPTIMIZED OUT) */ assert(yyruleno!=360);
- /* (361) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==361);
- /* (362) columnlist ::= columnname carglist */ yytestcase(yyruleno==362);
- /* (363) nm ::= ID|INDEXED|JOIN_KW */ yytestcase(yyruleno==363);
- /* (364) nm ::= STRING */ yytestcase(yyruleno==364);
- /* (365) typetoken ::= typename */ yytestcase(yyruleno==365);
- /* (366) typename ::= ID|STRING */ yytestcase(yyruleno==366);
- /* (367) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=367);
- /* (368) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=368);
- /* (369) carglist ::= carglist ccons */ yytestcase(yyruleno==369);
- /* (370) carglist ::= */ yytestcase(yyruleno==370);
- /* (371) ccons ::= NULL onconf */ yytestcase(yyruleno==371);
- /* (372) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==372);
- /* (373) ccons ::= AS generated */ yytestcase(yyruleno==373);
- /* (374) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==374);
- /* (375) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==375);
- /* (376) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=376);
- /* (377) tconscomma ::= */ yytestcase(yyruleno==377);
- /* (378) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=378);
- /* (379) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=379);
- /* (380) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=380);
- /* (381) oneselect ::= values */ yytestcase(yyruleno==381);
- /* (382) sclp ::= selcollist COMMA */ yytestcase(yyruleno==382);
- /* (383) as ::= ID|STRING */ yytestcase(yyruleno==383);
- /* (384) indexed_opt ::= indexed_by (OPTIMIZED OUT) */ assert(yyruleno!=384);
- /* (385) returning ::= */ yytestcase(yyruleno==385);
- /* (386) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=386);
- /* (387) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==387);
- /* (388) case_operand ::= expr */ yytestcase(yyruleno==388);
- /* (389) exprlist ::= nexprlist */ yytestcase(yyruleno==389);
- /* (390) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=390);
- /* (391) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=391);
- /* (392) nmnum ::= ON */ yytestcase(yyruleno==392);
- /* (393) nmnum ::= DELETE */ yytestcase(yyruleno==393);
- /* (394) nmnum ::= DEFAULT */ yytestcase(yyruleno==394);
- /* (395) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==395);
- /* (396) foreach_clause ::= */ yytestcase(yyruleno==396);
- /* (397) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==397);
- /* (398) trnm ::= nm */ yytestcase(yyruleno==398);
- /* (399) tridxby ::= */ yytestcase(yyruleno==399);
- /* (400) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==400);
- /* (401) database_kw_opt ::= */ yytestcase(yyruleno==401);
- /* (402) kwcolumn_opt ::= */ yytestcase(yyruleno==402);
- /* (403) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==403);
- /* (404) vtabarglist ::= vtabarg */ yytestcase(yyruleno==404);
- /* (405) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==405);
- /* (406) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==406);
- /* (407) anylist ::= */ yytestcase(yyruleno==407);
- /* (408) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==408);
- /* (409) anylist ::= anylist ANY */ yytestcase(yyruleno==409);
- /* (410) with ::= */ yytestcase(yyruleno==410);
- /* (411) windowdefn_list ::= windowdefn (OPTIMIZED OUT) */ assert(yyruleno!=411);
- /* (412) window ::= frame_opt (OPTIMIZED OUT) */ assert(yyruleno!=412);
+ /* (352) input ::= cmdlist */ yytestcase(yyruleno==352);
+ /* (353) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==353);
+ /* (354) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=354);
+ /* (355) ecmd ::= SEMI */ yytestcase(yyruleno==355);
+ /* (356) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==356);
+ /* (357) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=357);
+ /* (358) trans_opt ::= */ yytestcase(yyruleno==358);
+ /* (359) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==359);
+ /* (360) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==360);
+ /* (361) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==361);
+ /* (362) savepoint_opt ::= */ yytestcase(yyruleno==362);
+ /* (363) cmd ::= create_table create_table_args */ yytestcase(yyruleno==363);
+ /* (364) table_option_set ::= table_option (OPTIMIZED OUT) */ assert(yyruleno!=364);
+ /* (365) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==365);
+ /* (366) columnlist ::= columnname carglist */ yytestcase(yyruleno==366);
+ /* (367) nm ::= ID|INDEXED|JOIN_KW */ yytestcase(yyruleno==367);
+ /* (368) nm ::= STRING */ yytestcase(yyruleno==368);
+ /* (369) typetoken ::= typename */ yytestcase(yyruleno==369);
+ /* (370) typename ::= ID|STRING */ yytestcase(yyruleno==370);
+ /* (371) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=371);
+ /* (372) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=372);
+ /* (373) carglist ::= carglist ccons */ yytestcase(yyruleno==373);
+ /* (374) carglist ::= */ yytestcase(yyruleno==374);
+ /* (375) ccons ::= NULL onconf */ yytestcase(yyruleno==375);
+ /* (376) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==376);
+ /* (377) ccons ::= AS generated */ yytestcase(yyruleno==377);
+ /* (378) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==378);
+ /* (379) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==379);
+ /* (380) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=380);
+ /* (381) tconscomma ::= */ yytestcase(yyruleno==381);
+ /* (382) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=382);
+ /* (383) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=383);
+ /* (384) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=384);
+ /* (385) oneselect ::= values */ yytestcase(yyruleno==385);
+ /* (386) sclp ::= selcollist COMMA */ yytestcase(yyruleno==386);
+ /* (387) as ::= ID|STRING */ yytestcase(yyruleno==387);
+ /* (388) indexed_opt ::= indexed_by (OPTIMIZED OUT) */ assert(yyruleno!=388);
+ /* (389) returning ::= */ yytestcase(yyruleno==389);
+ /* (390) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=390);
+ /* (391) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==391);
+ /* (392) case_operand ::= expr */ yytestcase(yyruleno==392);
+ /* (393) exprlist ::= nexprlist */ yytestcase(yyruleno==393);
+ /* (394) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=394);
+ /* (395) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=395);
+ /* (396) nmnum ::= ON */ yytestcase(yyruleno==396);
+ /* (397) nmnum ::= DELETE */ yytestcase(yyruleno==397);
+ /* (398) nmnum ::= DEFAULT */ yytestcase(yyruleno==398);
+ /* (399) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==399);
+ /* (400) foreach_clause ::= */ yytestcase(yyruleno==400);
+ /* (401) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==401);
+ /* (402) trnm ::= nm */ yytestcase(yyruleno==402);
+ /* (403) tridxby ::= */ yytestcase(yyruleno==403);
+ /* (404) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==404);
+ /* (405) database_kw_opt ::= */ yytestcase(yyruleno==405);
+ /* (406) kwcolumn_opt ::= */ yytestcase(yyruleno==406);
+ /* (407) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==407);
+ /* (408) vtabarglist ::= vtabarg */ yytestcase(yyruleno==408);
+ /* (409) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==409);
+ /* (410) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==410);
+ /* (411) anylist ::= */ yytestcase(yyruleno==411);
+ /* (412) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==412);
+ /* (413) anylist ::= anylist ANY */ yytestcase(yyruleno==413);
+ /* (414) with ::= */ yytestcase(yyruleno==414);
+ /* (415) windowdefn_list ::= windowdefn (OPTIMIZED OUT) */ assert(yyruleno!=415);
+ /* (416) window ::= frame_opt (OPTIMIZED OUT) */ assert(yyruleno!=416);
break;
/********** End reduce actions ************************************************/
};
@@ -178972,19 +180596,12 @@ SQLITE_PRIVATE void sqlite3Parser(
(int)(yypParser->yytos - yypParser->yystack));
}
#endif
-#if YYSTACKDEPTH>0
if( yypParser->yytos>=yypParser->yystackEnd ){
- yyStackOverflow(yypParser);
- break;
- }
-#else
- if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){
if( yyGrowStack(yypParser) ){
yyStackOverflow(yypParser);
break;
}
}
-#endif
}
yyact = yy_reduce(yypParser,yyruleno,yymajor,yyminor sqlite3ParserCTX_PARAM);
}else if( yyact <= YY_MAX_SHIFTREDUCE ){
@@ -180062,27 +181679,58 @@ SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){
*tokenType = TK_INTEGER;
#ifndef SQLITE_OMIT_HEX_INTEGER
if( z[0]=='0' && (z[1]=='x' || z[1]=='X') && sqlite3Isxdigit(z[2]) ){
- for(i=3; sqlite3Isxdigit(z[i]); i++){}
- return i;
- }
+ for(i=3; 1; i++){
+ if( sqlite3Isxdigit(z[i])==0 ){
+ if( z[i]==SQLITE_DIGIT_SEPARATOR ){
+ *tokenType = TK_QNUMBER;
+ }else{
+ break;
+ }
+ }
+ }
+ }else
#endif
- for(i=0; sqlite3Isdigit(z[i]); i++){}
+ {
+ for(i=0; 1; i++){
+ if( sqlite3Isdigit(z[i])==0 ){
+ if( z[i]==SQLITE_DIGIT_SEPARATOR ){
+ *tokenType = TK_QNUMBER;
+ }else{
+ break;
+ }
+ }
+ }
#ifndef SQLITE_OMIT_FLOATING_POINT
- if( z[i]=='.' ){
- i++;
- while( sqlite3Isdigit(z[i]) ){ i++; }
- *tokenType = TK_FLOAT;
- }
- if( (z[i]=='e' || z[i]=='E') &&
- ( sqlite3Isdigit(z[i+1])
- || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2]))
- )
- ){
- i += 2;
- while( sqlite3Isdigit(z[i]) ){ i++; }
- *tokenType = TK_FLOAT;
- }
+ if( z[i]=='.' ){
+ if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
+ for(i++; 1; i++){
+ if( sqlite3Isdigit(z[i])==0 ){
+ if( z[i]==SQLITE_DIGIT_SEPARATOR ){
+ *tokenType = TK_QNUMBER;
+ }else{
+ break;
+ }
+ }
+ }
+ }
+ if( (z[i]=='e' || z[i]=='E') &&
+ ( sqlite3Isdigit(z[i+1])
+ || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2]))
+ )
+ ){
+ if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT;
+ for(i+=2; 1; i++){
+ if( sqlite3Isdigit(z[i])==0 ){
+ if( z[i]==SQLITE_DIGIT_SEPARATOR ){
+ *tokenType = TK_QNUMBER;
+ }else{
+ break;
+ }
+ }
+ }
+ }
#endif
+ }
while( IdChar(z[i]) ){
*tokenType = TK_ILLEGAL;
i++;
@@ -180247,10 +181895,13 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql){
if( tokenType>=TK_WINDOW ){
assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER
|| tokenType==TK_ILLEGAL || tokenType==TK_WINDOW
+ || tokenType==TK_QNUMBER
);
#else
if( tokenType>=TK_SPACE ){
- assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL );
+ assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL
+ || tokenType==TK_QNUMBER
+ );
#endif /* SQLITE_OMIT_WINDOWFUNC */
if( AtomicLoad(&db->u1.isInterrupted) ){
pParse->rc = SQLITE_INTERRUPT;
@@ -180283,7 +181934,7 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql){
assert( n==6 );
tokenType = analyzeFilterKeyword((const u8*)&zSql[6], lastTokenParsed);
#endif /* SQLITE_OMIT_WINDOWFUNC */
- }else{
+ }else if( tokenType!=TK_QNUMBER ){
Token x;
x.z = zSql;
x.n = n;
@@ -181643,6 +183294,18 @@ SQLITE_API int sqlite3_config(int op, ...){
}
#endif /* SQLITE_OMIT_DESERIALIZE */
+ case SQLITE_CONFIG_ROWID_IN_VIEW: {
+ int *pVal = va_arg(ap,int*);
+#ifdef SQLITE_ALLOW_ROWID_IN_VIEW
+ if( 0==*pVal ) sqlite3GlobalConfig.mNoVisibleRowid = TF_NoVisibleRowid;
+ if( 1==*pVal ) sqlite3GlobalConfig.mNoVisibleRowid = 0;
+ *pVal = (sqlite3GlobalConfig.mNoVisibleRowid==0);
+#else
+ *pVal = 0;
+#endif
+ break;
+ }
+
default: {
rc = SQLITE_ERROR;
break;
@@ -191545,22 +193208,24 @@ static int fts3IntegrityMethod(
char **pzErr /* Write error message here */
){
Fts3Table *p = (Fts3Table*)pVtab;
- int rc;
+ int rc = SQLITE_OK;
int bOk = 0;
UNUSED_PARAMETER(isQuick);
rc = sqlite3Fts3IntegrityCheck(p, &bOk);
- assert( rc!=SQLITE_CORRUPT_VTAB || bOk==0 );
- if( rc!=SQLITE_OK && rc!=SQLITE_CORRUPT_VTAB ){
+ assert( rc!=SQLITE_CORRUPT_VTAB );
+ if( rc==SQLITE_ERROR || (rc&0xFF)==SQLITE_CORRUPT ){
*pzErr = sqlite3_mprintf("unable to validate the inverted index for"
" FTS%d table %s.%s: %s",
p->bFts4 ? 4 : 3, zSchema, zTabname, sqlite3_errstr(rc));
- }else if( bOk==0 ){
+ if( *pzErr ) rc = SQLITE_OK;
+ }else if( rc==SQLITE_OK && bOk==0 ){
*pzErr = sqlite3_mprintf("malformed inverted index for FTS%d table %s.%s",
p->bFts4 ? 4 : 3, zSchema, zTabname);
+ if( *pzErr==0 ) rc = SQLITE_NOMEM;
}
sqlite3Fts3SegmentsClose(p);
- return SQLITE_OK;
+ return rc;
}
@@ -203222,7 +204887,12 @@ SQLITE_PRIVATE int sqlite3Fts3IntegrityCheck(Fts3Table *p, int *pbOk){
sqlite3_finalize(pStmt);
}
- *pbOk = (rc==SQLITE_OK && cksum1==cksum2);
+ if( rc==SQLITE_CORRUPT_VTAB ){
+ rc = SQLITE_OK;
+ *pbOk = 0;
+ }else{
+ *pbOk = (rc==SQLITE_OK && cksum1==cksum2);
+ }
return rc;
}
@@ -204128,7 +205798,7 @@ static void fts3SnippetDetails(
}
mCover |= mPhrase;
- for(j=0; jnToken; j++){
+ for(j=0; jnToken && jnSnippet; j++){
mHighlight |= (mPos>>j);
}
@@ -206789,7 +208459,6 @@ static void jsonAppendRawNZ(JsonString *p, const char *zIn, u32 N){
}
}
-
/* Append formatted text (not to exceed N bytes) to the JsonString.
*/
static void jsonPrintf(int N, JsonString *p, const char *zFormat, ...){
@@ -206847,6 +208516,40 @@ static void jsonAppendSeparator(JsonString *p){
jsonAppendChar(p, ',');
}
+/* c is a control character. Append the canonical JSON representation
+** of that control character to p.
+**
+** This routine assumes that the output buffer has already been enlarged
+** sufficiently to hold the worst-case encoding plus a nul terminator.
+*/
+static void jsonAppendControlChar(JsonString *p, u8 c){
+ static const char aSpecial[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 'b', 't', 'n', 0, 'f', 'r', 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ };
+ assert( sizeof(aSpecial)==32 );
+ assert( aSpecial['\b']=='b' );
+ assert( aSpecial['\f']=='f' );
+ assert( aSpecial['\n']=='n' );
+ assert( aSpecial['\r']=='r' );
+ assert( aSpecial['\t']=='t' );
+ assert( c>=0 && cnUsed+7 <= p->nAlloc );
+ if( aSpecial[c] ){
+ p->zBuf[p->nUsed] = '\\';
+ p->zBuf[p->nUsed+1] = aSpecial[c];
+ p->nUsed += 2;
+ }else{
+ p->zBuf[p->nUsed] = '\\';
+ p->zBuf[p->nUsed+1] = 'u';
+ p->zBuf[p->nUsed+2] = '0';
+ p->zBuf[p->nUsed+3] = '0';
+ p->zBuf[p->nUsed+4] = "0123456789abcdef"[c>>4];
+ p->zBuf[p->nUsed+5] = "0123456789abcdef"[c&0xf];
+ p->nUsed += 6;
+ }
+}
+
/* Append the N-byte string in zIn to the end of the JsonString string
** under construction. Enclose the string in double-quotes ("...") and
** escape any double-quotes or backslash characters contained within the
@@ -206906,35 +208609,14 @@ static void jsonAppendString(JsonString *p, const char *zIn, u32 N){
}
c = z[0];
if( c=='"' || c=='\\' ){
- json_simple_escape:
if( (p->nUsed+N+3 > p->nAlloc) && jsonStringGrow(p,N+3)!=0 ) return;
p->zBuf[p->nUsed++] = '\\';
p->zBuf[p->nUsed++] = c;
}else if( c=='\'' ){
p->zBuf[p->nUsed++] = c;
}else{
- static const char aSpecial[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 'b', 't', 'n', 0, 'f', 'r', 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
- assert( sizeof(aSpecial)==32 );
- assert( aSpecial['\b']=='b' );
- assert( aSpecial['\f']=='f' );
- assert( aSpecial['\n']=='n' );
- assert( aSpecial['\r']=='r' );
- assert( aSpecial['\t']=='t' );
- assert( c>=0 && cnUsed+N+7 > p->nAlloc) && jsonStringGrow(p,N+7)!=0 ) return;
- p->zBuf[p->nUsed++] = '\\';
- p->zBuf[p->nUsed++] = 'u';
- p->zBuf[p->nUsed++] = '0';
- p->zBuf[p->nUsed++] = '0';
- p->zBuf[p->nUsed++] = "0123456789abcdef"[c>>4];
- p->zBuf[p->nUsed++] = "0123456789abcdef"[c&0xf];
+ jsonAppendControlChar(p, c);
}
z++;
N--;
@@ -207635,7 +209317,10 @@ static u32 jsonbValidityCheck(
if( !jsonIsOk[z[j]] && z[j]!='\'' ){
if( z[j]=='"' ){
if( x==JSONB_TEXTJ ) return j+1;
- }else if( z[j]!='\\' || j+1>=k ){
+ }else if( z[j]<=0x1f ){
+ /* Control characters in JSON5 string literals are ok */
+ if( x==JSONB_TEXTJ ) return j+1;
+ }else if( NEVER(z[j]!='\\') || j+1>=k ){
return j+1;
}else if( strchr("\"\\/bfnrt",z[j+1])!=0 ){
j++;
@@ -207833,6 +209518,7 @@ static int jsonTranslateTextToBlob(JsonParse *pParse, u32 i){
case '[': {
/* Parse array */
iThis = pParse->nBlob;
+ assert( i<=(u32)pParse->nJson );
jsonBlobAppendNode(pParse, JSONB_ARRAY, pParse->nJson - i, 0);
iStart = pParse->nBlob;
if( pParse->oom ) return -1;
@@ -207929,9 +209615,14 @@ static int jsonTranslateTextToBlob(JsonParse *pParse, u32 i){
return -1;
}
}else if( c<=0x1f ){
- /* Control characters are not allowed in strings */
- pParse->iErr = j;
- return -1;
+ if( c==0 ){
+ pParse->iErr = j;
+ return -1;
+ }
+ /* Control characters are not allowed in canonical JSON string
+ ** literals, but are allowed in JSON5 string literals. */
+ opcode = JSONB_TEXT5;
+ pParse->hasNonstd = 1;
}else if( c=='"' ){
opcode = JSONB_TEXT5;
}
@@ -208147,6 +209838,7 @@ static int jsonTranslateTextToBlob(JsonParse *pParse, u32 i){
return i+4;
}
/* fall-through into the default case that checks for NaN */
+ /* no break */ deliberate_fall_through
}
default: {
u32 k;
@@ -208231,6 +209923,10 @@ static void jsonReturnStringAsBlob(JsonString *pStr){
JsonParse px;
memset(&px, 0, sizeof(px));
jsonStringTerminate(pStr);
+ if( pStr->eErr ){
+ sqlite3_result_error_nomem(pStr->pCtx);
+ return;
+ }
px.zJson = pStr->zBuf;
px.nJson = pStr->nUsed;
px.db = sqlite3_context_db_handle(pStr->pCtx);
@@ -208411,7 +210107,7 @@ static u32 jsonTranslateBlobToText(
zIn = (const char*)&pParse->aBlob[i+n];
jsonAppendChar(pOut, '"');
while( sz2>0 ){
- for(k=0; k0 ){
jsonAppendRawNZ(pOut, zIn, k);
if( k>=sz2 ){
@@ -208426,6 +210122,13 @@ static u32 jsonTranslateBlobToText(
sz2--;
continue;
}
+ if( zIn[0]<=0x1f ){
+ if( pOut->nUsed+7>pOut->nAlloc && jsonStringGrow(pOut,7) ) break;
+ jsonAppendControlChar(pOut, zIn[0]);
+ zIn++;
+ sz2--;
+ continue;
+ }
assert( zIn[0]=='\\' );
assert( sz2>=1 );
if( sz2<2 ){
@@ -208528,6 +210231,112 @@ static u32 jsonTranslateBlobToText(
return i+n+sz;
}
+/* Context for recursion of json_pretty()
+*/
+typedef struct JsonPretty JsonPretty;
+struct JsonPretty {
+ JsonParse *pParse; /* The BLOB being rendered */
+ JsonString *pOut; /* Generate pretty output into this string */
+ const char *zIndent; /* Use this text for indentation */
+ u32 szIndent; /* Bytes in zIndent[] */
+ u32 nIndent; /* Current level of indentation */
+};
+
+/* Append indentation to the pretty JSON under construction */
+static void jsonPrettyIndent(JsonPretty *pPretty){
+ u32 jj;
+ for(jj=0; jjnIndent; jj++){
+ jsonAppendRaw(pPretty->pOut, pPretty->zIndent, pPretty->szIndent);
+ }
+}
+
+/*
+** Translate the binary JSONB representation of JSON beginning at
+** pParse->aBlob[i] into a JSON text string. Append the JSON
+** text onto the end of pOut. Return the index in pParse->aBlob[]
+** of the first byte past the end of the element that is translated.
+**
+** This is a variant of jsonTranslateBlobToText() that "pretty-prints"
+** the output. Extra whitespace is inserted to make the JSON easier
+** for humans to read.
+**
+** If an error is detected in the BLOB input, the pOut->eErr flag
+** might get set to JSTRING_MALFORMED. But not all BLOB input errors
+** are detected. So a malformed JSONB input might either result
+** in an error, or in incorrect JSON.
+**
+** The pOut->eErr JSTRING_OOM flag is set on a OOM.
+*/
+static u32 jsonTranslateBlobToPrettyText(
+ JsonPretty *pPretty, /* Pretty-printing context */
+ u32 i /* Start rendering at this index */
+){
+ u32 sz, n, j, iEnd;
+ const JsonParse *pParse = pPretty->pParse;
+ JsonString *pOut = pPretty->pOut;
+ n = jsonbPayloadSize(pParse, i, &sz);
+ if( n==0 ){
+ pOut->eErr |= JSTRING_MALFORMED;
+ return pParse->nBlob+1;
+ }
+ switch( pParse->aBlob[i] & 0x0f ){
+ case JSONB_ARRAY: {
+ j = i+n;
+ iEnd = j+sz;
+ jsonAppendChar(pOut, '[');
+ if( jnIndent++;
+ while( pOut->eErr==0 ){
+ jsonPrettyIndent(pPretty);
+ j = jsonTranslateBlobToPrettyText(pPretty, j);
+ if( j>=iEnd ) break;
+ jsonAppendRawNZ(pOut, ",\n", 2);
+ }
+ jsonAppendChar(pOut, '\n');
+ pPretty->nIndent--;
+ jsonPrettyIndent(pPretty);
+ }
+ jsonAppendChar(pOut, ']');
+ i = iEnd;
+ break;
+ }
+ case JSONB_OBJECT: {
+ j = i+n;
+ iEnd = j+sz;
+ jsonAppendChar(pOut, '{');
+ if( jnIndent++;
+ while( pOut->eErr==0 ){
+ jsonPrettyIndent(pPretty);
+ j = jsonTranslateBlobToText(pParse, j, pOut);
+ if( j>iEnd ){
+ pOut->eErr |= JSTRING_MALFORMED;
+ break;
+ }
+ jsonAppendRawNZ(pOut, ": ", 2);
+ j = jsonTranslateBlobToPrettyText(pPretty, j);
+ if( j>=iEnd ) break;
+ jsonAppendRawNZ(pOut, ",\n", 2);
+ }
+ jsonAppendChar(pOut, '\n');
+ pPretty->nIndent--;
+ jsonPrettyIndent(pPretty);
+ }
+ jsonAppendChar(pOut, '}');
+ i = iEnd;
+ break;
+ }
+ default: {
+ i = jsonTranslateBlobToText(pParse, i, pOut);
+ break;
+ }
+ }
+ return i;
+}
+
+
/* Return true if the input pJson
**
** For performance reasons, this routine does not do a detailed check of the
@@ -209556,8 +211365,9 @@ static JsonParse *jsonParseFuncArg(
}
p->zJson = (char*)sqlite3_value_text(pArg);
p->nJson = sqlite3_value_bytes(pArg);
+ if( db->mallocFailed ) goto json_pfa_oom;
if( p->nJson==0 ) goto json_pfa_malformed;
- if( NEVER(p->zJson==0) ) goto json_pfa_oom;
+ assert( p->zJson!=0 );
if( jsonConvertTextToBlob(p, (flgs & JSON_KEEPERROR) ? 0 : ctx) ){
if( flgs & JSON_KEEPERROR ){
p->nErr = 1;
@@ -209723,10 +211533,10 @@ static void jsonDebugPrintBlob(
if( sz==0 && x<=JSONB_FALSE ){
sqlite3_str_append(pOut, "\n", 1);
}else{
- u32 i;
+ u32 j;
sqlite3_str_appendall(pOut, ": \"");
- for(i=iStart+n; iaBlob[i];
+ for(j=iStart+n; jaBlob[j];
if( c<0x20 || c>=0x7f ) c = '.';
sqlite3_str_append(pOut, (char*)&c, 1);
}
@@ -209777,11 +211587,12 @@ static void jsonParseFunc(
if( p==0 ) return;
if( argc==1 ){
jsonDebugPrintBlob(p, 0, p->nBlob, 0, &out);
- sqlite3_result_text64(ctx, out.zText, out.nChar, SQLITE_DYNAMIC, SQLITE_UTF8);
+ sqlite3_result_text64(ctx,out.zText,out.nChar,SQLITE_TRANSIENT,SQLITE_UTF8);
}else{
jsonShowParse(p);
}
jsonParseFree(p);
+ sqlite3_str_reset(&out);
}
#endif /* SQLITE_DEBUG */
@@ -209880,13 +211691,6 @@ static void jsonArrayLengthFunc(
jsonParseFree(p);
}
-/* True if the string is all digits */
-static int jsonAllDigits(const char *z, int n){
- int i;
- for(i=0; i $[NUMBER] // Not PG. Purely for convenience
*/
jsonStringInit(&jx, ctx);
- if( jsonAllDigits(zPath, nPath) ){
+ if( sqlite3_value_type(argv[i])==SQLITE_INTEGER ){
jsonAppendRawNZ(&jx, "[", 1);
jsonAppendRaw(&jx, zPath, nPath);
jsonAppendRawNZ(&jx, "]", 2);
@@ -210445,6 +212249,40 @@ static void jsonTypeFunc(
jsonParseFree(p);
}
+/*
+** json_pretty(JSON)
+** json_pretty(JSON, INDENT)
+**
+** Return text that is a pretty-printed rendering of the input JSON.
+** If the argument is not valid JSON, return NULL.
+**
+** The INDENT argument is text that is used for indentation. If omitted,
+** it defaults to four spaces (the same as PostgreSQL).
+*/
+static void jsonPrettyFunc(
+ sqlite3_context *ctx,
+ int argc,
+ sqlite3_value **argv
+){
+ JsonString s; /* The output string */
+ JsonPretty x; /* Pretty printing context */
+
+ memset(&x, 0, sizeof(x));
+ x.pParse = jsonParseFuncArg(ctx, argv[0], 0);
+ if( x.pParse==0 ) return;
+ x.pOut = &s;
+ jsonStringInit(&s, ctx);
+ if( argc==1 || (x.zIndent = (const char*)sqlite3_value_text(argv[1]))==0 ){
+ x.zIndent = " ";
+ x.szIndent = 4;
+ }else{
+ x.szIndent = (u32)strlen(x.zIndent);
+ }
+ jsonTranslateBlobToPrettyText(&x, 0);
+ jsonReturnString(&s, 0, 0);
+ jsonParseFree(x.pParse);
+}
+
/*
** json_valid(JSON)
** json_valid(JSON, FLAGS)
@@ -211134,6 +212972,9 @@ static int jsonEachColumn(
case JEACH_VALUE: {
u32 i = jsonSkipLabel(p);
jsonReturnFromBlob(&p->sParse, i, ctx, 1);
+ if( (p->sParse.aBlob[i] & 0x0f)>=JSONB_ARRAY ){
+ sqlite3_result_subtype(ctx, JSON_SUBTYPE);
+ }
break;
}
case JEACH_TYPE: {
@@ -211180,9 +213021,9 @@ static int jsonEachColumn(
case JEACH_JSON: {
if( p->sParse.zJson==0 ){
sqlite3_result_blob(ctx, p->sParse.aBlob, p->sParse.nBlob,
- SQLITE_STATIC);
+ SQLITE_TRANSIENT);
}else{
- sqlite3_result_text(ctx, p->sParse.zJson, -1, SQLITE_STATIC);
+ sqlite3_result_text(ctx, p->sParse.zJson, -1, SQLITE_TRANSIENT);
}
break;
}
@@ -211456,6 +213297,8 @@ SQLITE_PRIVATE void sqlite3RegisterJsonFunctions(void){
JFUNCTION(jsonb_object, -1,0,1, 1,1,0, jsonObjectFunc),
JFUNCTION(json_patch, 2,1,1, 0,0,0, jsonPatchFunc),
JFUNCTION(jsonb_patch, 2,1,0, 0,1,0, jsonPatchFunc),
+ JFUNCTION(json_pretty, 1,1,0, 0,0,0, jsonPrettyFunc),
+ JFUNCTION(json_pretty, 2,1,0, 0,0,0, jsonPrettyFunc),
JFUNCTION(json_quote, 1,0,1, 1,0,0, jsonQuoteFunc),
JFUNCTION(json_remove, -1,1,1, 0,0,0, jsonRemoveFunc),
JFUNCTION(jsonb_remove, -1,1,0, 0,1,0, jsonRemoveFunc),
@@ -217699,11 +219542,9 @@ static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){
** Clear the Rtree.pNodeBlob object
*/
static void nodeBlobReset(Rtree *pRtree){
- if( pRtree->pNodeBlob && pRtree->inWrTrans==0 && pRtree->nCursor==0 ){
- sqlite3_blob *pBlob = pRtree->pNodeBlob;
- pRtree->pNodeBlob = 0;
- sqlite3_blob_close(pBlob);
- }
+ sqlite3_blob *pBlob = pRtree->pNodeBlob;
+ pRtree->pNodeBlob = 0;
+ sqlite3_blob_close(pBlob);
}
/*
@@ -217747,7 +219588,6 @@ static int nodeAcquire(
&pRtree->pNodeBlob);
}
if( rc ){
- nodeBlobReset(pRtree);
*ppNode = 0;
/* If unable to open an sqlite3_blob on the desired row, that can only
** be because the shadow tables hold erroneous data. */
@@ -217807,6 +219647,7 @@ static int nodeAcquire(
}
*ppNode = pNode;
}else{
+ nodeBlobReset(pRtree);
if( pNode ){
pRtree->nNodeRef--;
sqlite3_free(pNode);
@@ -217951,6 +219792,7 @@ static void nodeGetCoord(
int iCoord, /* Which coordinate to extract */
RtreeCoord *pCoord /* OUT: Space to write result to */
){
+ assert( iCellzData[12 + pRtree->nBytesPerCell*iCell + 4*iCoord], pCoord);
}
@@ -218140,7 +219982,9 @@ static int rtreeClose(sqlite3_vtab_cursor *cur){
sqlite3_finalize(pCsr->pReadAux);
sqlite3_free(pCsr);
pRtree->nCursor--;
- nodeBlobReset(pRtree);
+ if( pRtree->nCursor==0 && pRtree->inWrTrans==0 ){
+ nodeBlobReset(pRtree);
+ }
return SQLITE_OK;
}
@@ -218725,7 +220569,11 @@ static int rtreeRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *pRowid){
int rc = SQLITE_OK;
RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc);
if( rc==SQLITE_OK && ALWAYS(p) ){
- *pRowid = nodeGetRowid(RTREE_OF_CURSOR(pCsr), pNode, p->iCell);
+ if( p->iCell>=NCELL(pNode) ){
+ rc = SQLITE_ABORT;
+ }else{
+ *pRowid = nodeGetRowid(RTREE_OF_CURSOR(pCsr), pNode, p->iCell);
+ }
}
return rc;
}
@@ -218743,6 +220591,7 @@ static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){
if( rc ) return rc;
if( NEVER(p==0) ) return SQLITE_OK;
+ if( p->iCell>=NCELL(pNode) ) return SQLITE_ABORT;
if( i==0 ){
sqlite3_result_int64(ctx, nodeGetRowid(pRtree, pNode, p->iCell));
}else if( i<=pRtree->nDim2 ){
@@ -218840,6 +220689,8 @@ static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){
return SQLITE_OK;
}
+SQLITE_PRIVATE int sqlite3IntFloatCompare(i64,double);
+
/*
** Rtree virtual table module xFilter method.
*/
@@ -218869,7 +220720,8 @@ static int rtreeFilter(
i64 iNode = 0;
int eType = sqlite3_value_numeric_type(argv[0]);
if( eType==SQLITE_INTEGER
- || (eType==SQLITE_FLOAT && sqlite3_value_double(argv[0])==iRowid)
+ || (eType==SQLITE_FLOAT
+ && 0==sqlite3IntFloatCompare(iRowid,sqlite3_value_double(argv[0])))
){
rc = findLeafNode(pRtree, iRowid, &pLeaf, &iNode);
}else{
@@ -220225,7 +222077,7 @@ static int rtreeUpdate(
static int rtreeBeginTransaction(sqlite3_vtab *pVtab){
Rtree *pRtree = (Rtree *)pVtab;
assert( pRtree->inWrTrans==0 );
- pRtree->inWrTrans++;
+ pRtree->inWrTrans = 1;
return SQLITE_OK;
}
@@ -220239,6 +222091,9 @@ static int rtreeEndTransaction(sqlite3_vtab *pVtab){
nodeBlobReset(pRtree);
return SQLITE_OK;
}
+static int rtreeRollback(sqlite3_vtab *pVtab){
+ return rtreeEndTransaction(pVtab);
+}
/*
** The xRename method for rtree module virtual tables.
@@ -220357,7 +222212,7 @@ static sqlite3_module rtreeModule = {
rtreeBeginTransaction, /* xBegin - begin transaction */
rtreeEndTransaction, /* xSync - sync transaction */
rtreeEndTransaction, /* xCommit - commit transaction */
- rtreeEndTransaction, /* xRollback - rollback transaction */
+ rtreeRollback, /* xRollback - rollback transaction */
0, /* xFindFunction - function overloading */
rtreeRename, /* xRename - rename the table */
rtreeSavepoint, /* xSavepoint */
@@ -223776,7 +225631,7 @@ static void icuLoadCollation(
UCollator *pUCollator; /* ICU library collation object */
int rc; /* Return code from sqlite3_create_collation_x() */
- assert(nArg==2);
+ assert(nArg==2 || nArg==3);
(void)nArg; /* Unused parameter */
zLocale = (const char *)sqlite3_value_text(apArg[0]);
zName = (const char *)sqlite3_value_text(apArg[1]);
@@ -223791,7 +225646,39 @@ static void icuLoadCollation(
return;
}
assert(p);
-
+ if(nArg==3){
+ const char *zOption = (const char*)sqlite3_value_text(apArg[2]);
+ static const struct {
+ const char *zName;
+ UColAttributeValue val;
+ } aStrength[] = {
+ { "PRIMARY", UCOL_PRIMARY },
+ { "SECONDARY", UCOL_SECONDARY },
+ { "TERTIARY", UCOL_TERTIARY },
+ { "DEFAULT", UCOL_DEFAULT_STRENGTH },
+ { "QUARTERNARY", UCOL_QUATERNARY },
+ { "IDENTICAL", UCOL_IDENTICAL },
+ };
+ unsigned int i;
+ for(i=0; i=sizeof(aStrength)/sizeof(aStrength[0]) ){
+ sqlite3_str *pStr = sqlite3_str_new(sqlite3_context_db_handle(p));
+ sqlite3_str_appendf(pStr,
+ "unknown collation strength \"%s\" - should be one of:",
+ zOption);
+ for(i=0; ipTblIter, &p->zErrmsg);
pIter->zTbl = 0;
+ pIter->zDataTbl = 0;
}else{
pIter->zTbl = (const char*)sqlite3_column_text(pIter->pTblIter, 0);
pIter->zDataTbl = (const char*)sqlite3_column_text(pIter->pTblIter,1);
@@ -227744,7 +229634,7 @@ static i64 rbuShmChecksum(sqlite3rbu *p){
u32 volatile *ptr;
p->rc = pDb->pMethods->xShmMap(pDb, 0, 32*1024, 0, (void volatile**)&ptr);
if( p->rc==SQLITE_OK ){
- iRet = ((i64)ptr[10] << 32) + ptr[11];
+ iRet = (i64)(((u64)ptr[10] << 32) + ptr[11]);
}
}
return iRet;
@@ -235215,14 +237105,14 @@ static int sessionChangesetNextOne(
p->rc = sessionInputBuffer(&p->in, 2);
if( p->rc!=SQLITE_OK ) return p->rc;
+ sessionDiscardData(&p->in);
+ p->in.iCurrent = p->in.iNext;
+
/* If the iterator is already at the end of the changeset, return DONE. */
if( p->in.iNext>=p->in.nData ){
return SQLITE_DONE;
}
- sessionDiscardData(&p->in);
- p->in.iCurrent = p->in.iNext;
-
op = p->in.aData[p->in.iNext++];
while( op=='T' || op=='P' ){
if( pbNew ) *pbNew = 1;
@@ -236957,6 +238847,7 @@ struct sqlite3_changegroup {
int rc; /* Error code */
int bPatch; /* True to accumulate patchsets */
SessionTable *pList; /* List of tables in current patch */
+ SessionBuffer rec;
sqlite3 *db; /* Configured by changegroup_schema() */
char *zDb; /* Configured by changegroup_schema() */
@@ -237255,108 +239146,128 @@ static int sessionChangesetExtendRecord(
}
/*
-** Add all changes in the changeset traversed by the iterator passed as
-** the first argument to the changegroup hash tables.
+** Locate or create a SessionTable object that may be used to add the
+** change currently pointed to by iterator pIter to changegroup pGrp.
+** If successful, set output variable (*ppTab) to point to the table
+** object and return SQLITE_OK. Otherwise, if some error occurs, return
+** an SQLite error code and leave (*ppTab) set to NULL.
*/
-static int sessionChangesetToHash(
- sqlite3_changeset_iter *pIter, /* Iterator to read from */
- sqlite3_changegroup *pGrp, /* Changegroup object to add changeset to */
- int bRebase /* True if hash table is for rebasing */
+static int sessionChangesetFindTable(
+ sqlite3_changegroup *pGrp,
+ const char *zTab,
+ sqlite3_changeset_iter *pIter,
+ SessionTable **ppTab
){
- u8 *aRec;
- int nRec;
int rc = SQLITE_OK;
SessionTable *pTab = 0;
- SessionBuffer rec = {0, 0, 0};
-
- while( SQLITE_ROW==sessionChangesetNext(pIter, &aRec, &nRec, 0) ){
- const char *zNew;
- int nCol;
- int op;
- int iHash;
- int bIndirect;
- SessionChange *pChange;
- SessionChange *pExist = 0;
- SessionChange **pp;
-
- /* Ensure that only changesets, or only patchsets, but not a mixture
- ** of both, are being combined. It is an error to try to combine a
- ** changeset and a patchset. */
- if( pGrp->pList==0 ){
- pGrp->bPatch = pIter->bPatchset;
- }else if( pIter->bPatchset!=pGrp->bPatch ){
- rc = SQLITE_ERROR;
- break;
- }
+ int nTab = (int)strlen(zTab);
+ u8 *abPK = 0;
+ int nCol = 0;
- sqlite3changeset_op(pIter, &zNew, &nCol, &op, &bIndirect);
- if( !pTab || sqlite3_stricmp(zNew, pTab->zName) ){
- /* Search the list for a matching table */
- int nNew = (int)strlen(zNew);
- u8 *abPK;
+ *ppTab = 0;
+ sqlite3changeset_pk(pIter, &abPK, &nCol);
- sqlite3changeset_pk(pIter, &abPK, 0);
- for(pTab = pGrp->pList; pTab; pTab=pTab->pNext){
- if( 0==sqlite3_strnicmp(pTab->zName, zNew, nNew+1) ) break;
- }
- if( !pTab ){
- SessionTable **ppTab;
+ /* Search the list for an existing table */
+ for(pTab = pGrp->pList; pTab; pTab=pTab->pNext){
+ if( 0==sqlite3_strnicmp(pTab->zName, zTab, nTab+1) ) break;
+ }
- pTab = sqlite3_malloc64(sizeof(SessionTable) + nCol + nNew+1);
- if( !pTab ){
- rc = SQLITE_NOMEM;
- break;
- }
- memset(pTab, 0, sizeof(SessionTable));
- pTab->nCol = nCol;
- pTab->abPK = (u8*)&pTab[1];
- memcpy(pTab->abPK, abPK, nCol);
- pTab->zName = (char*)&pTab->abPK[nCol];
- memcpy(pTab->zName, zNew, nNew+1);
-
- if( pGrp->db ){
- pTab->nCol = 0;
- rc = sessionInitTable(0, pTab, pGrp->db, pGrp->zDb);
- if( rc ){
- assert( pTab->azCol==0 );
- sqlite3_free(pTab);
- break;
- }
- }
+ /* If one was not found above, create a new table now */
+ if( !pTab ){
+ SessionTable **ppNew;
- /* The new object must be linked on to the end of the list, not
- ** simply added to the start of it. This is to ensure that the
- ** tables within the output of sqlite3changegroup_output() are in
- ** the right order. */
- for(ppTab=&pGrp->pList; *ppTab; ppTab=&(*ppTab)->pNext);
- *ppTab = pTab;
- }
+ pTab = sqlite3_malloc64(sizeof(SessionTable) + nCol + nTab+1);
+ if( !pTab ){
+ return SQLITE_NOMEM;
+ }
+ memset(pTab, 0, sizeof(SessionTable));
+ pTab->nCol = nCol;
+ pTab->abPK = (u8*)&pTab[1];
+ memcpy(pTab->abPK, abPK, nCol);
+ pTab->zName = (char*)&pTab->abPK[nCol];
+ memcpy(pTab->zName, zTab, nTab+1);
- if( !sessionChangesetCheckCompat(pTab, nCol, abPK) ){
- rc = SQLITE_SCHEMA;
- break;
+ if( pGrp->db ){
+ pTab->nCol = 0;
+ rc = sessionInitTable(0, pTab, pGrp->db, pGrp->zDb);
+ if( rc ){
+ assert( pTab->azCol==0 );
+ sqlite3_free(pTab);
+ return rc;
}
}
- if( nColnCol ){
- assert( pGrp->db );
- rc = sessionChangesetExtendRecord(pGrp, pTab, nCol, op, aRec, nRec, &rec);
- if( rc ) break;
- aRec = rec.aBuf;
- nRec = rec.nBuf;
- }
+ /* The new object must be linked on to the end of the list, not
+ ** simply added to the start of it. This is to ensure that the
+ ** tables within the output of sqlite3changegroup_output() are in
+ ** the right order. */
+ for(ppNew=&pGrp->pList; *ppNew; ppNew=&(*ppNew)->pNext);
+ *ppNew = pTab;
+ }
- if( sessionGrowHash(0, pIter->bPatchset, pTab) ){
- rc = SQLITE_NOMEM;
- break;
- }
+ /* Check that the table is compatible. */
+ if( !sessionChangesetCheckCompat(pTab, nCol, abPK) ){
+ rc = SQLITE_SCHEMA;
+ }
+
+ *ppTab = pTab;
+ return rc;
+}
+
+/*
+** Add the change currently indicated by iterator pIter to the hash table
+** belonging to changegroup pGrp.
+*/
+static int sessionOneChangeToHash(
+ sqlite3_changegroup *pGrp,
+ sqlite3_changeset_iter *pIter,
+ int bRebase
+){
+ int rc = SQLITE_OK;
+ int nCol = 0;
+ int op = 0;
+ int iHash = 0;
+ int bIndirect = 0;
+ SessionChange *pChange = 0;
+ SessionChange *pExist = 0;
+ SessionChange **pp = 0;
+ SessionTable *pTab = 0;
+ u8 *aRec = &pIter->in.aData[pIter->in.iCurrent + 2];
+ int nRec = (pIter->in.iNext - pIter->in.iCurrent) - 2;
+
+ /* Ensure that only changesets, or only patchsets, but not a mixture
+ ** of both, are being combined. It is an error to try to combine a
+ ** changeset and a patchset. */
+ if( pGrp->pList==0 ){
+ pGrp->bPatch = pIter->bPatchset;
+ }else if( pIter->bPatchset!=pGrp->bPatch ){
+ rc = SQLITE_ERROR;
+ }
+
+ if( rc==SQLITE_OK ){
+ const char *zTab = 0;
+ sqlite3changeset_op(pIter, &zTab, &nCol, &op, &bIndirect);
+ rc = sessionChangesetFindTable(pGrp, zTab, pIter, &pTab);
+ }
+
+ if( rc==SQLITE_OK && nColnCol ){
+ SessionBuffer *pBuf = &pGrp->rec;
+ rc = sessionChangesetExtendRecord(pGrp, pTab, nCol, op, aRec, nRec, pBuf);
+ aRec = pBuf->aBuf;
+ nRec = pBuf->nBuf;
+ assert( pGrp->db );
+ }
+
+ if( rc==SQLITE_OK && sessionGrowHash(0, pIter->bPatchset, pTab) ){
+ rc = SQLITE_NOMEM;
+ }
+
+ if( rc==SQLITE_OK ){
+ /* Search for existing entry. If found, remove it from the hash table.
+ ** Code below may link it back in. */
iHash = sessionChangeHash(
pTab, (pIter->bPatchset && op==SQLITE_DELETE), aRec, pTab->nChange
);
-
- /* Search for existing entry. If found, remove it from the hash table.
- ** Code below may link it back in.
- */
for(pp=&pTab->apChange[iHash]; *pp; pp=&(*pp)->pNext){
int bPkOnly1 = 0;
int bPkOnly2 = 0;
@@ -237371,19 +239282,41 @@ static int sessionChangesetToHash(
break;
}
}
+ }
+ if( rc==SQLITE_OK ){
rc = sessionChangeMerge(pTab, bRebase,
pIter->bPatchset, pExist, op, bIndirect, aRec, nRec, &pChange
);
- if( rc ) break;
- if( pChange ){
- pChange->pNext = pTab->apChange[iHash];
- pTab->apChange[iHash] = pChange;
- pTab->nEntry++;
- }
+ }
+ if( rc==SQLITE_OK && pChange ){
+ pChange->pNext = pTab->apChange[iHash];
+ pTab->apChange[iHash] = pChange;
+ pTab->nEntry++;
+ }
+
+ if( rc==SQLITE_OK ) rc = pIter->rc;
+ return rc;
+}
+
+/*
+** Add all changes in the changeset traversed by the iterator passed as
+** the first argument to the changegroup hash tables.
+*/
+static int sessionChangesetToHash(
+ sqlite3_changeset_iter *pIter, /* Iterator to read from */
+ sqlite3_changegroup *pGrp, /* Changegroup object to add changeset to */
+ int bRebase /* True if hash table is for rebasing */
+){
+ u8 *aRec;
+ int nRec;
+ int rc = SQLITE_OK;
+
+ while( SQLITE_ROW==(sessionChangesetNext(pIter, &aRec, &nRec, 0)) ){
+ rc = sessionOneChangeToHash(pGrp, pIter, bRebase);
+ if( rc!=SQLITE_OK ) break;
}
- sqlite3_free(rec.aBuf);
if( rc==SQLITE_OK ) rc = pIter->rc;
return rc;
}
@@ -237511,6 +239444,23 @@ SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup *pGrp, int nData, void
return rc;
}
+/*
+** Add a single change to a changeset-group.
+*/
+SQLITE_API int sqlite3changegroup_add_change(
+ sqlite3_changegroup *pGrp,
+ sqlite3_changeset_iter *pIter
+){
+ if( pIter->in.iCurrent==pIter->in.iNext
+ || pIter->rc!=SQLITE_OK
+ || pIter->bInvert
+ ){
+ /* Iterator does not point to any valid entry or is an INVERT iterator. */
+ return SQLITE_ERROR;
+ }
+ return sessionOneChangeToHash(pGrp, pIter, 0);
+}
+
/*
** Obtain a buffer containing a changeset representing the concatenation
** of all changesets added to the group so far.
@@ -237560,6 +239510,7 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup *pGrp){
if( pGrp ){
sqlite3_free(pGrp->zDb);
sessionDeleteTable(0, pGrp->pList);
+ sqlite3_free(pGrp->rec.aBuf);
sqlite3_free(pGrp);
}
}
@@ -237961,6 +239912,7 @@ SQLITE_API int sqlite3rebaser_rebase_strm(
SQLITE_API void sqlite3rebaser_delete(sqlite3_rebaser *p){
if( p ){
sessionDeleteTable(0, p->grp.pList);
+ sqlite3_free(p->grp.rec.aBuf);
sqlite3_free(p);
}
}
@@ -238058,8 +240010,8 @@ struct Fts5PhraseIter {
** EXTENSION API FUNCTIONS
**
** xUserData(pFts):
-** Return a copy of the context pointer the extension function was
-** registered with.
+** Return a copy of the pUserData pointer passed to the xCreateFunction()
+** API when the extension function was registered.
**
** xColumnTotalSize(pFts, iCol, pnToken):
** If parameter iCol is less than zero, set output variable *pnToken
@@ -239655,6 +241607,9 @@ static void sqlite3Fts5UnicodeAscii(u8*, u8*);
** sqlite3Fts5ParserARG_STORE Code to store %extra_argument into fts5yypParser
** sqlite3Fts5ParserARG_FETCH Code to extract %extra_argument from fts5yypParser
** sqlite3Fts5ParserCTX_* As sqlite3Fts5ParserARG_ except for %extra_context
+** fts5YYREALLOC Name of the realloc() function to use
+** fts5YYFREE Name of the free() function to use
+** fts5YYDYNSTACK True if stack space should be extended on heap
** fts5YYERRORSYMBOL is the code number of the error symbol. If not
** defined, then do no error processing.
** fts5YYNSTATE the combined number of states.
@@ -239668,6 +241623,8 @@ static void sqlite3Fts5UnicodeAscii(u8*, u8*);
** fts5YY_NO_ACTION The fts5yy_action[] code for no-op
** fts5YY_MIN_REDUCE Minimum value for reduce actions
** fts5YY_MAX_REDUCE Maximum value for reduce actions
+** fts5YY_MIN_DSTRCTR Minimum symbol value that has a destructor
+** fts5YY_MAX_DSTRCTR Maximum symbol value that has a destructor
*/
#ifndef INTERFACE
# define INTERFACE 1
@@ -239694,6 +241651,9 @@ typedef union {
#define sqlite3Fts5ParserARG_PARAM ,pParse
#define sqlite3Fts5ParserARG_FETCH Fts5Parse *pParse=fts5yypParser->pParse;
#define sqlite3Fts5ParserARG_STORE fts5yypParser->pParse=pParse;
+#define fts5YYREALLOC realloc
+#define fts5YYFREE free
+#define fts5YYDYNSTACK 0
#define sqlite3Fts5ParserCTX_SDECL
#define sqlite3Fts5ParserCTX_PDECL
#define sqlite3Fts5ParserCTX_PARAM
@@ -239711,6 +241671,8 @@ typedef union {
#define fts5YY_NO_ACTION 82
#define fts5YY_MIN_REDUCE 83
#define fts5YY_MAX_REDUCE 110
+#define fts5YY_MIN_DSTRCTR 16
+#define fts5YY_MAX_DSTRCTR 24
/************* End control #defines *******************************************/
#define fts5YY_NLOOKAHEAD ((int)(sizeof(fts5yy_lookahead)/sizeof(fts5yy_lookahead[0])))
@@ -239726,6 +241688,22 @@ typedef union {
# define fts5yytestcase(X)
#endif
+/* Macro to determine if stack space has the ability to grow using
+** heap memory.
+*/
+#if fts5YYSTACKDEPTH<=0 || fts5YYDYNSTACK
+# define fts5YYGROWABLESTACK 1
+#else
+# define fts5YYGROWABLESTACK 0
+#endif
+
+/* Guarantee a minimum number of initial stack slots.
+*/
+#if fts5YYSTACKDEPTH<=0
+# undef fts5YYSTACKDEPTH
+# define fts5YYSTACKDEPTH 2 /* Need a minimum stack size */
+#endif
+
/* Next are the tables used to determine what action to take based on the
** current state and lookahead token. These tables are used to implement
@@ -239886,14 +241864,9 @@ struct fts5yyParser {
#endif
sqlite3Fts5ParserARG_SDECL /* A place to hold %extra_argument */
sqlite3Fts5ParserCTX_SDECL /* A place to hold %extra_context */
-#if fts5YYSTACKDEPTH<=0
- int fts5yystksz; /* Current side of the stack */
- fts5yyStackEntry *fts5yystack; /* The parser's stack */
- fts5yyStackEntry fts5yystk0; /* First stack entry */
-#else
- fts5yyStackEntry fts5yystack[fts5YYSTACKDEPTH]; /* The parser's stack */
- fts5yyStackEntry *fts5yystackEnd; /* Last entry in the stack */
-#endif
+ fts5yyStackEntry *fts5yystackEnd; /* Last entry in the stack */
+ fts5yyStackEntry *fts5yystack; /* The parser stack */
+ fts5yyStackEntry fts5yystk0[fts5YYSTACKDEPTH]; /* Initial stack space */
};
typedef struct fts5yyParser fts5yyParser;
@@ -240000,37 +241973,45 @@ static const char *const fts5yyRuleName[] = {
#endif /* NDEBUG */
-#if fts5YYSTACKDEPTH<=0
+#if fts5YYGROWABLESTACK
/*
** Try to increase the size of the parser stack. Return the number
** of errors. Return 0 on success.
*/
static int fts5yyGrowStack(fts5yyParser *p){
+ int oldSize = 1 + (int)(p->fts5yystackEnd - p->fts5yystack);
int newSize;
int idx;
fts5yyStackEntry *pNew;
- newSize = p->fts5yystksz*2 + 100;
- idx = p->fts5yytos ? (int)(p->fts5yytos - p->fts5yystack) : 0;
- if( p->fts5yystack==&p->fts5yystk0 ){
- pNew = malloc(newSize*sizeof(pNew[0]));
- if( pNew ) pNew[0] = p->fts5yystk0;
+ newSize = oldSize*2 + 100;
+ idx = (int)(p->fts5yytos - p->fts5yystack);
+ if( p->fts5yystack==p->fts5yystk0 ){
+ pNew = fts5YYREALLOC(0, newSize*sizeof(pNew[0]));
+ if( pNew==0 ) return 1;
+ memcpy(pNew, p->fts5yystack, oldSize*sizeof(pNew[0]));
}else{
- pNew = realloc(p->fts5yystack, newSize*sizeof(pNew[0]));
+ pNew = fts5YYREALLOC(p->fts5yystack, newSize*sizeof(pNew[0]));
+ if( pNew==0 ) return 1;
}
- if( pNew ){
- p->fts5yystack = pNew;
- p->fts5yytos = &p->fts5yystack[idx];
+ p->fts5yystack = pNew;
+ p->fts5yytos = &p->fts5yystack[idx];
#ifndef NDEBUG
- if( fts5yyTraceFILE ){
- fprintf(fts5yyTraceFILE,"%sStack grows from %d to %d entries.\n",
- fts5yyTracePrompt, p->fts5yystksz, newSize);
- }
-#endif
- p->fts5yystksz = newSize;
+ if( fts5yyTraceFILE ){
+ fprintf(fts5yyTraceFILE,"%sStack grows from %d to %d entries.\n",
+ fts5yyTracePrompt, oldSize, newSize);
}
- return pNew==0;
+#endif
+ p->fts5yystackEnd = &p->fts5yystack[newSize-1];
+ return 0;
}
+#endif /* fts5YYGROWABLESTACK */
+
+#if !fts5YYGROWABLESTACK
+/* For builds that do no have a growable stack, fts5yyGrowStack always
+** returns an error.
+*/
+# define fts5yyGrowStack(X) 1
#endif
/* Datatype of the argument to the memory allocated passed as the
@@ -240050,24 +242031,14 @@ static void sqlite3Fts5ParserInit(void *fts5yypRawParser sqlite3Fts5ParserCTX_PD
#ifdef fts5YYTRACKMAXSTACKDEPTH
fts5yypParser->fts5yyhwm = 0;
#endif
-#if fts5YYSTACKDEPTH<=0
- fts5yypParser->fts5yytos = NULL;
- fts5yypParser->fts5yystack = NULL;
- fts5yypParser->fts5yystksz = 0;
- if( fts5yyGrowStack(fts5yypParser) ){
- fts5yypParser->fts5yystack = &fts5yypParser->fts5yystk0;
- fts5yypParser->fts5yystksz = 1;
- }
-#endif
+ fts5yypParser->fts5yystack = fts5yypParser->fts5yystk0;
+ fts5yypParser->fts5yystackEnd = &fts5yypParser->fts5yystack[fts5YYSTACKDEPTH-1];
#ifndef fts5YYNOERRORRECOVERY
fts5yypParser->fts5yyerrcnt = -1;
#endif
fts5yypParser->fts5yytos = fts5yypParser->fts5yystack;
fts5yypParser->fts5yystack[0].stateno = 0;
fts5yypParser->fts5yystack[0].major = 0;
-#if fts5YYSTACKDEPTH>0
- fts5yypParser->fts5yystackEnd = &fts5yypParser->fts5yystack[fts5YYSTACKDEPTH-1];
-#endif
}
#ifndef sqlite3Fts5Parser_ENGINEALWAYSONSTACK
@@ -240181,9 +242152,26 @@ static void fts5yy_pop_parser_stack(fts5yyParser *pParser){
*/
static void sqlite3Fts5ParserFinalize(void *p){
fts5yyParser *pParser = (fts5yyParser*)p;
- while( pParser->fts5yytos>pParser->fts5yystack ) fts5yy_pop_parser_stack(pParser);
-#if fts5YYSTACKDEPTH<=0
- if( pParser->fts5yystack!=&pParser->fts5yystk0 ) free(pParser->fts5yystack);
+
+ /* In-lined version of calling fts5yy_pop_parser_stack() for each
+ ** element left in the stack */
+ fts5yyStackEntry *fts5yytos = pParser->fts5yytos;
+ while( fts5yytos>pParser->fts5yystack ){
+#ifndef NDEBUG
+ if( fts5yyTraceFILE ){
+ fprintf(fts5yyTraceFILE,"%sPopping %s\n",
+ fts5yyTracePrompt,
+ fts5yyTokenName[fts5yytos->major]);
+ }
+#endif
+ if( fts5yytos->major>=fts5YY_MIN_DSTRCTR ){
+ fts5yy_destructor(pParser, fts5yytos->major, &fts5yytos->minor);
+ }
+ fts5yytos--;
+ }
+
+#if fts5YYGROWABLESTACK
+ if( pParser->fts5yystack!=pParser->fts5yystk0 ) fts5YYFREE(pParser->fts5yystack);
#endif
}
@@ -240410,25 +242398,19 @@ static void fts5yy_shift(
assert( fts5yypParser->fts5yyhwm == (int)(fts5yypParser->fts5yytos - fts5yypParser->fts5yystack) );
}
#endif
-#if fts5YYSTACKDEPTH>0
- if( fts5yypParser->fts5yytos>fts5yypParser->fts5yystackEnd ){
- fts5yypParser->fts5yytos--;
- fts5yyStackOverflow(fts5yypParser);
- return;
- }
-#else
- if( fts5yypParser->fts5yytos>=&fts5yypParser->fts5yystack[fts5yypParser->fts5yystksz] ){
+ fts5yytos = fts5yypParser->fts5yytos;
+ if( fts5yytos>fts5yypParser->fts5yystackEnd ){
if( fts5yyGrowStack(fts5yypParser) ){
fts5yypParser->fts5yytos--;
fts5yyStackOverflow(fts5yypParser);
return;
}
+ fts5yytos = fts5yypParser->fts5yytos;
+ assert( fts5yytos <= fts5yypParser->fts5yystackEnd );
}
-#endif
if( fts5yyNewState > fts5YY_MAX_SHIFT ){
fts5yyNewState += fts5YY_MIN_REDUCE - fts5YY_MIN_SHIFTREDUCE;
}
- fts5yytos = fts5yypParser->fts5yytos;
fts5yytos->stateno = fts5yyNewState;
fts5yytos->major = fts5yyMajor;
fts5yytos->minor.fts5yy0 = fts5yyMinor;
@@ -240865,19 +242847,12 @@ static void sqlite3Fts5Parser(
(int)(fts5yypParser->fts5yytos - fts5yypParser->fts5yystack));
}
#endif
-#if fts5YYSTACKDEPTH>0
if( fts5yypParser->fts5yytos>=fts5yypParser->fts5yystackEnd ){
- fts5yyStackOverflow(fts5yypParser);
- break;
- }
-#else
- if( fts5yypParser->fts5yytos>=&fts5yypParser->fts5yystack[fts5yypParser->fts5yystksz-1] ){
if( fts5yyGrowStack(fts5yypParser) ){
fts5yyStackOverflow(fts5yypParser);
break;
}
}
-#endif
}
fts5yyact = fts5yy_reduce(fts5yypParser,fts5yyruleno,fts5yymajor,fts5yyminor sqlite3Fts5ParserCTX_PARAM);
}else if( fts5yyact <= fts5YY_MAX_SHIFTREDUCE ){
@@ -243554,7 +245529,11 @@ static int sqlite3Fts5ExprNew(
}
sqlite3_free(sParse.apPhrase);
- *pzErr = sParse.zErr;
+ if( 0==*pzErr ){
+ *pzErr = sParse.zErr;
+ }else{
+ sqlite3_free(sParse.zErr);
+ }
return sParse.rc;
}
@@ -245682,6 +247661,7 @@ static Fts5ExprNode *sqlite3Fts5ParseImplicitAnd(
assert( pRight->eType==FTS5_STRING
|| pRight->eType==FTS5_TERM
|| pRight->eType==FTS5_EOF
+ || (pRight->eType==FTS5_AND && pParse->bPhraseToAnd)
);
if( pLeft->eType==FTS5_AND ){
@@ -253916,23 +255896,26 @@ static void fts5IterSetOutputsTokendata(Fts5Iter *pIter){
static void fts5TokendataIterNext(Fts5Iter *pIter, int bFrom, i64 iFrom){
int ii;
Fts5TokenDataIter *pT = pIter->pTokenDataIter;
+ Fts5Index *pIndex = pIter->pIndex;
for(ii=0; iinIter; ii++){
Fts5Iter *p = pT->apIter[ii];
if( p->base.bEof==0
&& (p->base.iRowid==pIter->base.iRowid || (bFrom && p->base.iRowidpIndex, p, bFrom, iFrom);
+ fts5MultiIterNext(pIndex, p, bFrom, iFrom);
while( bFrom && p->base.bEof==0
&& p->base.iRowidpIndex->rc==SQLITE_OK
+ && pIndex->rc==SQLITE_OK
){
- fts5MultiIterNext(p->pIndex, p, 0, 0);
+ fts5MultiIterNext(pIndex, p, 0, 0);
}
}
}
- fts5IterSetOutputsTokendata(pIter);
+ if( pIndex->rc==SQLITE_OK ){
+ fts5IterSetOutputsTokendata(pIter);
+ }
}
/*
@@ -257846,6 +259829,7 @@ static int fts5UpdateMethod(
rc = SQLITE_ERROR;
}else{
rc = fts5SpecialDelete(pTab, apVal);
+ bUpdateOrDelete = 1;
}
}else{
rc = fts5SpecialInsert(pTab, z, apVal[2 + pConfig->nCol + 1]);
@@ -259020,14 +261004,16 @@ static int sqlite3Fts5GetTokenizer(
if( pMod==0 ){
assert( nArg>0 );
rc = SQLITE_ERROR;
- *pzErr = sqlite3_mprintf("no such tokenizer: %s", azArg[0]);
+ if( pzErr ) *pzErr = sqlite3_mprintf("no such tokenizer: %s", azArg[0]);
}else{
rc = pMod->x.xCreate(
pMod->pUserData, (azArg?&azArg[1]:0), (nArg?nArg-1:0), &pConfig->pTok
);
pConfig->pTokApi = &pMod->x;
if( rc!=SQLITE_OK ){
- if( pzErr ) *pzErr = sqlite3_mprintf("error in tokenizer constructor");
+ if( pzErr && rc!=SQLITE_NOMEM ){
+ *pzErr = sqlite3_mprintf("error in tokenizer constructor");
+ }
}else{
pConfig->ePattern = sqlite3Fts5TokenizerPattern(
pMod->x.xCreate, pConfig->pTok
@@ -259086,7 +261072,7 @@ static void fts5SourceIdFunc(
){
assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused);
- sqlite3_result_text(pCtx, "fts5: 2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257cc467a", -1, SQLITE_TRANSIENT);
+ sqlite3_result_text(pCtx, "fts5: 2024-08-13 09:16:08 c9c2ab54ba1f5f46360f1b4f35d849cd3f080e6fc2b6c60e91b16c63f69a1e33", -1, SQLITE_TRANSIENT);
}
/*
@@ -259121,18 +261107,25 @@ static int fts5IntegrityMethod(
assert( pzErr!=0 && *pzErr==0 );
UNUSED_PARAM(isQuick);
+ assert( pTab->p.pConfig->pzErrmsg==0 );
+ pTab->p.pConfig->pzErrmsg = pzErr;
rc = sqlite3Fts5StorageIntegrity(pTab->pStorage, 0);
- if( (rc&0xff)==SQLITE_CORRUPT ){
- *pzErr = sqlite3_mprintf("malformed inverted index for FTS5 table %s.%s",
- zSchema, zTabname);
- }else if( rc!=SQLITE_OK ){
- *pzErr = sqlite3_mprintf("unable to validate the inverted index for"
- " FTS5 table %s.%s: %s",
- zSchema, zTabname, sqlite3_errstr(rc));
+ if( *pzErr==0 && rc!=SQLITE_OK ){
+ if( (rc&0xff)==SQLITE_CORRUPT ){
+ *pzErr = sqlite3_mprintf("malformed inverted index for FTS5 table %s.%s",
+ zSchema, zTabname);
+ rc = (*pzErr) ? SQLITE_OK : SQLITE_NOMEM;
+ }else{
+ *pzErr = sqlite3_mprintf("unable to validate the inverted index for"
+ " FTS5 table %s.%s: %s",
+ zSchema, zTabname, sqlite3_errstr(rc));
+ }
}
+
sqlite3Fts5IndexCloseReader(pTab->p.pIndex);
+ pTab->p.pConfig->pzErrmsg = 0;
- return SQLITE_OK;
+ return rc;
}
static int fts5Init(sqlite3 *db){
@@ -260564,7 +262557,7 @@ static int fts5AsciiCreate(
int i;
memset(p, 0, sizeof(AsciiTokenizer));
memcpy(p->aTokenChar, aAsciiTokenChar, sizeof(aAsciiTokenChar));
- for(i=0; rc==SQLITE_OK && ibFold = 1;
- pNew->iFoldParam = 0;
- for(i=0; rc==SQLITE_OK && ibFold = (zArg[0]=='0');
- }
- }else if( 0==sqlite3_stricmp(azArg[i], "remove_diacritics") ){
- if( (zArg[0]!='0' && zArg[0]!='1' && zArg[0]!='2') || zArg[1] ){
- rc = SQLITE_ERROR;
- }else{
- pNew->iFoldParam = (zArg[0]!='0') ? 2 : 0;
- }
+ int i;
+ pNew->bFold = 1;
+ pNew->iFoldParam = 0;
+ for(i=0; rc==SQLITE_OK && ibFold = (zArg[0]=='0');
+ }
+ }else if( 0==sqlite3_stricmp(azArg[i], "remove_diacritics") ){
+ if( (zArg[0]!='0' && zArg[0]!='1' && zArg[0]!='2') || zArg[1] ){
rc = SQLITE_ERROR;
+ }else{
+ pNew->iFoldParam = (zArg[0]!='0') ? 2 : 0;
}
- }
-
- if( pNew->iFoldParam!=0 && pNew->bFold==0 ){
+ }else{
rc = SQLITE_ERROR;
}
+ }
+ if( iiFoldParam!=0 && pNew->bFold==0 ){
+ rc = SQLITE_ERROR;
+ }
+
+ if( rc!=SQLITE_OK ){
+ fts5TriDelete((Fts5Tokenizer*)pNew);
+ pNew = 0;
}
}
*ppOut = (Fts5Tokenizer*)pNew;
diff --git a/libsql-ffi/bundled/src/sqlite3.h b/libsql-ffi/bundled/src/sqlite3.h
index be068ebe3f..a2b5f5a812 100644
--- a/libsql-ffi/bundled/src/sqlite3.h
+++ b/libsql-ffi/bundled/src/sqlite3.h
@@ -149,9 +149,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.45.1"
-#define SQLITE_VERSION_NUMBER 3045001
-#define SQLITE_SOURCE_ID "2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257ccalt1"
+#define SQLITE_VERSION "3.46.1"
+#define SQLITE_VERSION_NUMBER 3046001
+#define SQLITE_SOURCE_ID "2024-08-13 09:16:08 c9c2ab54ba1f5f46360f1b4f35d849cd3f080e6fc2b6c60e91b16c63f69aalt1"
#define LIBSQL_VERSION "0.2.3"
@@ -427,6 +427,8 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**);
** the 1st parameter to sqlite3_exec() while sqlite3_exec() is running.
**
The application must not modify the SQL statement text passed into
** the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running.
+**
The application must not dereference the arrays or string pointers
+** passed as the 3rd and 4th callback parameters after it returns.
**
*/
SQLITE_API int sqlite3_exec(
@@ -769,11 +771,11 @@ struct sqlite3_file {
**
** xLock() upgrades the database file lock. In other words, xLock() moves the
** database file lock in the direction NONE toward EXCLUSIVE. The argument to
-** xLock() is always on of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
+** xLock() is always one of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
** SQLITE_LOCK_NONE. If the database file lock is already at or above the
** requested lock, then the call to xLock() is a no-op.
** xUnlock() downgrades the database file lock to either SHARED or NONE.
-* If the lock is already at or below the requested lock state, then the call
+** If the lock is already at or below the requested lock state, then the call
** to xUnlock() is a no-op.
** The xCheckReservedLock() method checks whether any database connection,
** either in this process or in some other process, is holding a RESERVED,
@@ -2168,6 +2170,22 @@ struct sqlite3_mem_methods {
** configuration setting is never used, then the default maximum is determined
** by the [SQLITE_MEMDB_DEFAULT_MAXSIZE] compile-time option. If that
** compile-time option is not set, then the default maximum is 1073741824.
+**
+** [[SQLITE_CONFIG_ROWID_IN_VIEW]]
+**
SQLITE_CONFIG_ROWID_IN_VIEW
+**
The SQLITE_CONFIG_ROWID_IN_VIEW option enables or disables the ability
+** for VIEWs to have a ROWID. The capability can only be enabled if SQLite is
+** compiled with -DSQLITE_ALLOW_ROWID_IN_VIEW, in which case the capability
+** defaults to on. This configuration option queries the current setting or
+** changes the setting to off or on. The argument is a pointer to an integer.
+** If that integer initially holds a value of 1, then the ability for VIEWs to
+** have ROWIDs is activated. If the integer initially holds zero, then the
+** ability is deactivated. Any other initial value for the integer leaves the
+** setting unchanged. After changes, if any, the integer is written with
+** a 1 or 0, if the ability for VIEWs to have ROWIDs is on or off. If SQLite
+** is compiled without -DSQLITE_ALLOW_ROWID_IN_VIEW (which is the usual and
+** recommended case) then the integer is always filled with zero, regardless
+** if its initial value.
**
*/
#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
@@ -2199,6 +2217,7 @@ struct sqlite3_mem_methods {
#define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */
#define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */
#define SQLITE_CONFIG_MEMDB_MAXSIZE 29 /* sqlite3_int64 */
+#define SQLITE_CONFIG_ROWID_IN_VIEW 30 /* int* */
/*
** CAPI3REF: Database Connection Configuration Options
@@ -3313,8 +3332,8 @@ SQLITE_API int sqlite3_set_authorizer(
#define SQLITE_RECURSIVE 33 /* NULL NULL */
/*
-** CAPI3REF: Tracing And Profiling Functions
-** METHOD: sqlite3
+** CAPI3REF: Deprecated Tracing And Profiling Functions
+** DEPRECATED
**
** These routines are deprecated. Use the [sqlite3_trace_v2()] interface
** instead of the routines described here.
@@ -6931,6 +6950,12 @@ SQLITE_API int sqlite3_autovacuum_pages(
** The exceptions defined in this paragraph might change in a future
** release of SQLite.
**
+** Whether the update hook is invoked before or after the
+** corresponding change is currently unspecified and may differ
+** depending on the type of change. Do not rely on the order of the
+** hook call with regards to the final result of the operation which
+** triggers the hook.
+**
** The update hook implementation must not do anything that will modify
** the database connection that invoked the update hook. Any actions
** to modify the database connection must be deferred until after the
@@ -8428,7 +8453,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
** The sqlite3_keyword_count() interface returns the number of distinct
** keywords understood by SQLite.
**
-** The sqlite3_keyword_name(N,Z,L) interface finds the N-th keyword and
+** The sqlite3_keyword_name(N,Z,L) interface finds the 0-based N-th keyword and
** makes *Z point to that keyword expressed as UTF8 and writes the number
** of bytes in the keyword into *L. The string that *Z points to is not
** zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns
@@ -10023,24 +10048,45 @@ SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
**
** ^(If the sqlite3_vtab_distinct() interface returns 2, that means
** that the query planner does not need the rows returned in any particular
-** order, as long as rows with the same values in all "aOrderBy" columns
-** are adjacent.)^ ^(Furthermore, only a single row for each particular
-** combination of values in the columns identified by the "aOrderBy" field
-** needs to be returned.)^ ^It is always ok for two or more rows with the same
-** values in all "aOrderBy" columns to be returned, as long as all such rows
-** are adjacent. ^The virtual table may, if it chooses, omit extra rows
-** that have the same value for all columns identified by "aOrderBy".
-** ^However omitting the extra rows is optional.
+** order, as long as rows with the same values in all columns identified
+** by "aOrderBy" are adjacent.)^ ^(Furthermore, when two or more rows
+** contain the same values for all columns identified by "colUsed", all but
+** one such row may optionally be omitted from the result.)^
+** The virtual table is not required to omit rows that are duplicates
+** over the "colUsed" columns, but if the virtual table can do that without
+** too much extra effort, it could potentially help the query to run faster.
** This mode is used for a DISTINCT query.
**
-** ^(If the sqlite3_vtab_distinct() interface returns 3, that means
-** that the query planner needs only distinct rows but it does need the
-** rows to be sorted.)^ ^The virtual table implementation is free to omit
-** rows that are identical in all aOrderBy columns, if it wants to, but
-** it is not required to omit any rows. This mode is used for queries
+** ^(If the sqlite3_vtab_distinct() interface returns 3, that means the
+** virtual table must return rows in the order defined by "aOrderBy" as
+** if the sqlite3_vtab_distinct() interface had returned 0. However if
+** two or more rows in the result have the same values for all columns
+** identified by "colUsed", then all but one such row may optionally be
+** omitted.)^ Like when the return value is 2, the virtual table
+** is not required to omit rows that are duplicates over the "colUsed"
+** columns, but if the virtual table can do that without
+** too much extra effort, it could potentially help the query to run faster.
+** This mode is used for queries
** that have both DISTINCT and ORDER BY clauses.
**
**
+**
The following table summarizes the conditions under which the
+** virtual table is allowed to set the "orderByConsumed" flag based on
+** the value returned by sqlite3_vtab_distinct(). This table is a
+** restatement of the previous four paragraphs:
+**
+**
+**
+**
sqlite3_vtab_distinct() return value
+**
Rows are returned in aOrderBy order
+**
Rows with the same value in all aOrderBy columns are adjacent
+**
Duplicates over all colUsed columns may be omitted
+**
0
yes
yes
no
+**
1
no
yes
no
+**
2
no
yes
yes
+**
3
yes
yes
yes
+**
+**
** ^For the purposes of comparing virtual table output values to see if the
** values are same value for sorting purposes, two NULL values are considered
** to be the same. In other words, the comparison operator is "IS"
@@ -12155,6 +12201,30 @@ SQLITE_API int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const c
*/
SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData);
+/*
+** CAPI3REF: Add A Single Change To A Changegroup
+** METHOD: sqlite3_changegroup
+**
+** This function adds the single change currently indicated by the iterator
+** passed as the second argument to the changegroup object. The rules for
+** adding the change are just as described for [sqlite3changegroup_add()].
+**
+** If the change is successfully added to the changegroup, SQLITE_OK is
+** returned. Otherwise, an SQLite error code is returned.
+**
+** The iterator must point to a valid entry when this function is called.
+** If it does not, SQLITE_ERROR is returned and no change is added to the
+** changegroup. Additionally, the iterator must not have been opened with
+** the SQLITE_CHANGESETAPPLY_INVERT flag. In this case SQLITE_ERROR is also
+** returned.
+*/
+SQLITE_API int sqlite3changegroup_add_change(
+ sqlite3_changegroup*,
+ sqlite3_changeset_iter*
+);
+
+
+
/*
** CAPI3REF: Obtain A Composite Changeset From A Changegroup
** METHOD: sqlite3_changegroup
@@ -12959,8 +13029,8 @@ struct Fts5PhraseIter {
** EXTENSION API FUNCTIONS
**
** xUserData(pFts):
-** Return a copy of the context pointer the extension function was
-** registered with.
+** Return a copy of the pUserData pointer passed to the xCreateFunction()
+** API when the extension function was registered.
**
** xColumnTotalSize(pFts, iCol, pnToken):
** If parameter iCol is less than zero, set output variable *pnToken
diff --git a/libsql-sqlite3/Makefile.in b/libsql-sqlite3/Makefile.in
index 0896f28b95..01b25f6d5f 100644
--- a/libsql-sqlite3/Makefile.in
+++ b/libsql-sqlite3/Makefile.in
@@ -469,6 +469,8 @@ TESTSRC = \
$(TOP)/ext/recover/sqlite3recover.c \
$(TOP)/ext/recover/dbdata.c \
$(TOP)/ext/recover/test_recover.c \
+ $(TOP)/ext/intck/test_intck.c \
+ $(TOP)/ext/intck/sqlite3intck.c \
$(TOP)/ext/rbu/test_rbu.c
# Statically linked extensions
@@ -890,7 +892,7 @@ testlibsql: sqlite3.h
cargo install cargo-hack && cargo hack check --each-feature --no-dev-deps
sqlite3.c: .target_source $(TOP)/tool/mksqlite3c.tcl src-verify has_tclsh84
- $(TCLSH_CMD) $(TOP)/tool/mksqlite3c.tcl $(AMALGAMATION_LINE_MACROS)
+ $(TCLSH_CMD) $(TOP)/tool/mksqlite3c.tcl $(AMALGAMATION_LINE_MACROS) $(EXTRA_SRC)
cp tsrc/sqlite3ext.h .
cp $(TOP)/ext/session/sqlite3session.h .
@@ -901,7 +903,7 @@ sqlite3r.c: sqlite3.c sqlite3r.h has_tclsh84
cp $(TOP)/ext/recover/sqlite3recover.c tsrc/
cp $(TOP)/ext/recover/sqlite3recover.h tsrc/
cp $(TOP)/ext/recover/dbdata.c tsrc/
- $(TCLSH_CMD) $(TOP)/tool/mksqlite3c.tcl --enable-recover $(AMALGAMATION_LINE_MACROS)
+ $(TCLSH_CMD) $(TOP)/tool/mksqlite3c.tcl --enable-recover $(AMALGAMATION_LINE_MACROS) $(EXTRA_SRC)
sqlite3ext.h: .target_source
cp tsrc/sqlite3ext.h .
@@ -1257,35 +1259,37 @@ keywordhash.h: $(TOP)/tool/mkkeywordhash.c
$(BCC) -o mkkeywordhash$(BEXE) $(OPT_FEATURE_FLAGS) $(OPTS) $(TOP)/tool/mkkeywordhash.c
./mkkeywordhash$(BEXE) >keywordhash.h
-# Source files that go into making shell.c
-SHELL_SRC = \
- $(TOP)/src/shell.c.in \
- $(TOP)/ext/consio/console_io.c \
- $(TOP)/ext/consio/console_io.h \
- $(TOP)/ext/misc/appendvfs.c \
- $(TOP)/ext/misc/completion.c \
- $(TOP)/ext/misc/decimal.c \
- $(TOP)/ext/misc/basexx.c \
- $(TOP)/ext/misc/base64.c \
- $(TOP)/ext/misc/base85.c \
- $(TOP)/ext/misc/fileio.c \
- $(TOP)/ext/misc/ieee754.c \
- $(TOP)/ext/misc/regexp.c \
- $(TOP)/ext/misc/series.c \
- $(TOP)/ext/misc/shathree.c \
- $(TOP)/ext/misc/sqlar.c \
- $(TOP)/ext/misc/uint.c \
- $(TOP)/ext/expert/sqlite3expert.c \
- $(TOP)/ext/expert/sqlite3expert.h \
- $(TOP)/ext/misc/zipfile.c \
- $(TOP)/ext/misc/memtrace.c \
- $(TOP)/ext/misc/pcachetrace.c \
- $(TOP)/ext/recover/dbdata.c \
- $(TOP)/ext/recover/sqlite3recover.c \
- $(TOP)/ext/recover/sqlite3recover.h \
- $(TOP)/src/test_windirent.c
-
-shell.c: $(SHELL_SRC) $(TOP)/tool/mkshellc.tcl has_tclsh84
+# Source and header files that shell.c depends on
+SHELL_DEP = \
+ $(TOP)/src/shell.c.in \
+ $(TOP)/ext/consio/console_io.c \
+ $(TOP)/ext/consio/console_io.h \
+ $(TOP)/ext/expert/sqlite3expert.c \
+ $(TOP)/ext/expert/sqlite3expert.h \
+ $(TOP)/ext/intck/sqlite3intck.c \
+ $(TOP)/ext/intck/sqlite3intck.h \
+ $(TOP)/ext/misc/appendvfs.c \
+ $(TOP)/ext/misc/base64.c \
+ $(TOP)/ext/misc/base85.c \
+ $(TOP)/ext/misc/completion.c \
+ $(TOP)/ext/misc/decimal.c \
+ $(TOP)/ext/misc/fileio.c \
+ $(TOP)/ext/misc/ieee754.c \
+ $(TOP)/ext/misc/memtrace.c \
+ $(TOP)/ext/misc/pcachetrace.c \
+ $(TOP)/ext/misc/regexp.c \
+ $(TOP)/ext/misc/series.c \
+ $(TOP)/ext/misc/shathree.c \
+ $(TOP)/ext/misc/sqlar.c \
+ $(TOP)/ext/misc/uint.c \
+ $(TOP)/ext/misc/zipfile.c \
+ $(TOP)/ext/recover/dbdata.c \
+ $(TOP)/ext/recover/sqlite3recover.c \
+ $(TOP)/ext/recover/sqlite3recover.h \
+ $(TOP)/src/test_windirent.c \
+ $(TOP)/src/test_windirent.h
+
+shell.c: $(SHELL_DEP) $(TOP)/tool/mkshellc.tcl has_tclsh84
$(TCLSH_CMD) $(TOP)/tool/mkshellc.tcl >shell.c
@@ -1416,9 +1420,9 @@ testfixture$(TEXE): has_tclsh85 $(TESTFIXTURE_SRC)
$(LTLINK) -DSQLITE_NO_SYNC=1 $(TEMP_STORE) $(TESTFIXTURE_FLAGS) \
-o $@ $(TESTFIXTURE_SRC) $(LIBTCL) $(TLIBS)
-coretestprogs: $(TESTPROGS)
+coretestprogs: testfixture$(BEXE) sqlite3$(BEXE)
-testprogs: coretestprogs srcck1$(BEXE) fuzzcheck$(TEXE) sessionfuzz$(TEXE)
+testprogs: $(TESTPROGS) srcck1$(BEXE) fuzzcheck$(TEXE) sessionfuzz$(TEXE)
# A very detailed test running most or all test cases
fulltest: alltest fuzztest
diff --git a/libsql-sqlite3/Makefile.msc b/libsql-sqlite3/Makefile.msc
index aa371176d1..298d798f8f 100644
--- a/libsql-sqlite3/Makefile.msc
+++ b/libsql-sqlite3/Makefile.msc
@@ -18,6 +18,13 @@ USE_AMALGAMATION = 1
!ENDIF
# <>
+# Optionally set EXTRA_SRC to a list of C files to append to
+# the generated sqlite3.c.
+#
+!IFNDEF EXTRA_SRC
+EXTRA_SRC =
+!ENDIF
+
# Set this non-0 to enable full warnings (-W4, etc) when compiling.
#
!IFNDEF USE_FULLWARN
@@ -1597,6 +1604,8 @@ TESTEXT = \
$(TOP)\ext\rtree\test_rtreedoc.c \
$(TOP)\ext\recover\sqlite3recover.c \
$(TOP)\ext\recover\test_recover.c \
+ $(TOP)\ext\intck\test_intck.c \
+ $(TOP)\ext\intck\sqlite3intck.c \
$(TOP)\ext\recover\dbdata.c
# If use of zlib is enabled, add the "zipfile.c" source file.
@@ -1915,7 +1924,7 @@ mptest: mptester.exe
echo > .target_source
sqlite3.c: .target_source sqlite3ext.h sqlite3session.h $(MKSQLITE3C_TOOL) src-verify.exe
- $(TCLSH_CMD) $(MKSQLITE3C_TOOL) $(MKSQLITE3C_ARGS)
+ $(TCLSH_CMD) $(MKSQLITE3C_TOOL) $(MKSQLITE3C_ARGS) $(EXTRA_SRC)
sqlite3-all.c: sqlite3.c $(TOP)\tool\split-sqlite3c.tcl
$(TCLSH_CMD) $(TOP)\tool\split-sqlite3c.tcl
@@ -2265,39 +2274,44 @@ mkkeywordhash.exe: $(TOP)\tool\mkkeywordhash.c
keywordhash.h: $(TOP)\tool\mkkeywordhash.c mkkeywordhash.exe
.\mkkeywordhash.exe > keywordhash.h
-# Source files that go into making shell.c
-SHELL_SRC = \
- $(TOP)\src\shell.c.in \
- $(TOP)\ext\consio\console_io.c \
- $(TOP)\ext\consio\console_io.h \
- $(TOP)\ext\misc\appendvfs.c \
- $(TOP)\ext\misc\completion.c \
- $(TOP)\ext\misc\base64.c \
- $(TOP)\ext\misc\base85.c \
- $(TOP)\ext\misc\decimal.c \
- $(TOP)\ext\misc\fileio.c \
- $(TOP)\ext\misc\ieee754.c \
- $(TOP)\ext\misc\regexp.c \
- $(TOP)\ext\misc\series.c \
- $(TOP)\ext\misc\shathree.c \
- $(TOP)\ext\misc\uint.c \
- $(TOP)\ext\expert\sqlite3expert.c \
- $(TOP)\ext\expert\sqlite3expert.h \
- $(TOP)\ext\misc\memtrace.c \
- $(TOP)\ext\misc\pcachetrace.c \
- $(TOP)\ext\recover\dbdata.c \
- $(TOP)\ext\recover\sqlite3recover.c \
- $(TOP)\ext\recover\sqlite3recover.h \
- $(TOP)\src\test_windirent.c
+# Source and header files that shell.c depends on
+SHELL_DEP = \
+ $(TOP)\src\shell.c.in \
+ $(TOP)\ext\consio\console_io.c \
+ $(TOP)\ext\consio\console_io.h \
+ $(TOP)\ext\expert\sqlite3expert.c \
+ $(TOP)\ext\expert\sqlite3expert.h \
+ $(TOP)\ext\intck\sqlite3intck.c \
+ $(TOP)\ext\intck\sqlite3intck.h \
+ $(TOP)\ext\misc\appendvfs.c \
+ $(TOP)\ext\misc\base64.c \
+ $(TOP)\ext\misc\base85.c \
+ $(TOP)\ext\misc\completion.c \
+ $(TOP)\ext\misc\decimal.c \
+ $(TOP)\ext\misc\fileio.c \
+ $(TOP)\ext\misc\ieee754.c \
+ $(TOP)\ext\misc\memtrace.c \
+ $(TOP)\ext\misc\pcachetrace.c \
+ $(TOP)\ext\misc\regexp.c \
+ $(TOP)\ext\misc\series.c \
+ $(TOP)\ext\misc\shathree.c \
+ $(TOP)\ext\misc\sqlar.c \
+ $(TOP)\ext\misc\uint.c \
+ $(TOP)\ext\misc\zipfile.c \
+ $(TOP)\ext\recover\dbdata.c \
+ $(TOP)\ext\recover\sqlite3recover.c \
+ $(TOP)\ext\recover\sqlite3recover.h \
+ $(TOP)\src\test_windirent.c \
+ $(TOP)\src\test_windirent.h
# If use of zlib is enabled, add the "zipfile.c" source file.
#
!IF $(USE_ZLIB)!=0
-SHELL_SRC = $(SHELL_SRC) $(TOP)\ext\misc\sqlar.c
-SHELL_SRC = $(SHELL_SRC) $(TOP)\ext\misc\zipfile.c
+SHELL_DEP = $(SHELL_DEP) $(TOP)\ext\misc\sqlar.c
+SHELL_DEP = $(SHELL_DEP) $(TOP)\ext\misc\zipfile.c
!ENDIF
-shell.c: $(SHELL_SRC) $(TOP)\tool\mkshellc.tcl
+shell.c: $(SHELL_DEP) $(TOP)\tool\mkshellc.tcl
$(TCLSH_CMD) $(TOP)\tool\mkshellc.tcl > shell.c
zlib:
@@ -2484,9 +2498,9 @@ extensiontest: testfixture.exe testloadext.dll
tool-zip: testfixture.exe sqlite3.exe sqldiff.exe sqlite3_analyzer.exe $(TOP)\tool\mktoolzip.tcl
.\testfixture.exe $(TOP)\tool\mktoolzip.tcl
-coretestprogs: $(TESTPROGS)
+coretestprogs: testfixture.exe sqlite3.exe
-testprogs: coretestprogs srcck1.exe fuzzcheck.exe sessionfuzz.exe
+testprogs: $(TESTPROGS) srcck1.exe fuzzcheck.exe sessionfuzz.exe
fulltest: alltest fuzztest
@@ -2541,7 +2555,7 @@ mdevtest:
# Testing for a release
#
-releasetest: testfixture.exe fuzztest
+releasetest: testfixture.exe
testfixture.exe $(TOP)\test\testrunner.tcl release
diff --git a/libsql-sqlite3/VERSION b/libsql-sqlite3/VERSION
index 08d7ea82ba..421931ea1e 100644
--- a/libsql-sqlite3/VERSION
+++ b/libsql-sqlite3/VERSION
@@ -1 +1 @@
-3.45.1
+3.46.1
diff --git a/libsql-sqlite3/art/icon-243x273.gif b/libsql-sqlite3/art/icon-243x273.gif
new file mode 100644
index 0000000000..e1cdfd0b51
Binary files /dev/null and b/libsql-sqlite3/art/icon-243x273.gif differ
diff --git a/libsql-sqlite3/art/icon-80x90.gif b/libsql-sqlite3/art/icon-80x90.gif
new file mode 100644
index 0000000000..ebb2390005
Binary files /dev/null and b/libsql-sqlite3/art/icon-80x90.gif differ
diff --git a/libsql-sqlite3/autoconf/Makefile.msc b/libsql-sqlite3/autoconf/Makefile.msc
index 45a07a9f31..a4270fb2ae 100644
--- a/libsql-sqlite3/autoconf/Makefile.msc
+++ b/libsql-sqlite3/autoconf/Makefile.msc
@@ -18,6 +18,13 @@
TOP = .
+# Optionally set EXTRA_SRC to a list of C files to append to
+# the generated sqlite3.c.
+#
+!IFNDEF EXTRA_SRC
+EXTRA_SRC =
+!ENDIF
+
# Set this non-0 to enable full warnings (-W4, etc) when compiling.
#
!IFNDEF USE_FULLWARN
diff --git a/libsql-sqlite3/autoconf/tea/configure.ac b/libsql-sqlite3/autoconf/tea/configure.ac
index 740bd9749d..ea7eeda70f 100644
--- a/libsql-sqlite3/autoconf/tea/configure.ac
+++ b/libsql-sqlite3/autoconf/tea/configure.ac
@@ -19,7 +19,7 @@ dnl to configure the system for the local environment.
# so that we create the export library with the dll.
#-----------------------------------------------------------------------
-AC_INIT([sqlite],[3.45.1])
+AC_INIT([sqlite],[3.46.1])
#--------------------------------------------------------------------
# Call TEA_INIT as the first TEA_ macro to set up initial vars.
diff --git a/libsql-sqlite3/configure b/libsql-sqlite3/configure
index 5facf22898..5ad0ccad3c 100755
--- a/libsql-sqlite3/configure
+++ b/libsql-sqlite3/configure
@@ -1,10 +1,9 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for sqlite 3.45.1.
+# Generated by GNU Autoconf 2.69 for sqlite 3.46.1.
#
#
-# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
-# Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
#
#
# This configure script is free software; the Free Software Foundation
@@ -15,16 +14,14 @@
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-as_nop=:
-if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
-then :
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else $as_nop
+else
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -34,46 +31,46 @@ esac
fi
-
-# Reset variables that may have inherited troublesome values from
-# the environment.
-
-# IFS needs to be set, to space, tab, and newline, in precisely that order.
-# (If _AS_PATH_WALK were called with IFS unset, it would have the
-# side effect of setting IFS to empty, thus disabling word splitting.)
-# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-IFS=" "" $as_nl"
-
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# Ensure predictable behavior from utilities with locale-dependent output.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# We cannot yet rely on "unset" to work, but we need these variables
-# to be unset--not just set to an empty or harmless value--now, to
-# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
-# also avoids known problems related to "unset" and subshell syntax
-# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
-for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
-do eval test \${$as_var+y} \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-
-# Ensure that fds 0, 1, and 2 are open.
-if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
-if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
# The user is always right.
-if ${PATH_SEPARATOR+false} :; then
+if test "${PATH_SEPARATOR+set}" != set; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -82,6 +79,13 @@ if ${PATH_SEPARATOR+false} :; then
fi
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -90,12 +94,8 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- test -r "$as_dir$0" && as_myself=$as_dir$0 && break
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
done
IFS=$as_save_IFS
@@ -107,10 +107,30 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
@@ -132,22 +152,20 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="as_nop=:
-if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
-then :
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
-else \$as_nop
+else
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
@@ -167,53 +185,42 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" )
-then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-else \$as_nop
+else
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
-blah=\$(echo \$(echo blah))
-test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null
-then :
+ if (eval "$as_required") 2>/dev/null; then :
as_have_required=yes
-else $as_nop
+else
as_have_required=no
fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
-then :
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-else $as_nop
+else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
- as_shell=$as_dir$as_base
+ as_shell=$as_dir/$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
-then :
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
CONFIG_SHELL=$as_shell as_have_required=yes
- if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
-then :
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
break 2
fi
fi
@@ -221,21 +228,14 @@ fi
esac
as_found=false
done
-IFS=$as_save_IFS
-if $as_found
-then :
-
-else $as_nop
- if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
-then :
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
CONFIG_SHELL=$SHELL as_have_required=yes
-fi
-fi
+fi; }
+IFS=$as_save_IFS
- if test "x$CONFIG_SHELL" != x
-then :
+ if test "x$CONFIG_SHELL" != x; then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
@@ -253,19 +253,18 @@ esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
-printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
- if test x$as_have_required = xno
-then :
- printf "%s\n" "$0: This script requires a shell more modern than all"
- printf "%s\n" "$0: the shells that I found on your system."
- if test ${ZSH_VERSION+y} ; then
- printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
else
- printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -292,7 +291,6 @@ as_fn_unset ()
}
as_unset=as_fn_unset
-
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -310,14 +308,6 @@ as_fn_exit ()
as_fn_set_status $1
exit $1
} # as_fn_exit
-# as_fn_nop
-# ---------
-# Do nothing but, unlike ":", preserve the value of $?.
-as_fn_nop ()
-{
- return $?
-}
-as_nop=as_fn_nop
# as_fn_mkdir_p
# -------------
@@ -332,7 +322,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -341,7 +331,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-printf "%s\n" X"$as_dir" |
+$as_echo X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -380,13 +370,12 @@ as_fn_executable_p ()
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
-then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else $as_nop
+else
as_fn_append ()
{
eval $1=\$$1\$2
@@ -398,27 +387,18 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
-then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else $as_nop
+else
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
-# as_fn_nop
-# ---------
-# Do nothing but, unlike ":", preserve the value of $?.
-as_fn_nop ()
-{
- return $?
-}
-as_nop=as_fn_nop
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
@@ -430,9 +410,9 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- printf "%s\n" "$as_me: error: $2" >&2
+ $as_echo "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
@@ -459,7 +439,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-printf "%s\n" X/"$0" |
+$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -503,7 +483,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
- { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
@@ -517,10 +497,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
exit
}
-
-# Determine whether it's possible to make 'echo' print without a newline.
-# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
-# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -534,13 +510,6 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
-# For backward compatibility with old third-party macros, we provide
-# the shell variables $as_echo and $as_echo_n. New code should use
-# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
-as_echo='printf %s\n'
-as_echo_n='printf %s'
-
-
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -757,51 +726,53 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='sqlite'
PACKAGE_TARNAME='sqlite'
-PACKAGE_VERSION='3.45.1'
-PACKAGE_STRING='sqlite 3.45.1'
+PACKAGE_VERSION='3.46.1'
+PACKAGE_STRING='sqlite 3.46.1'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
# Factoring default headers for most tests.
ac_includes_default="\
-#include
-#ifdef HAVE_STDIO_H
-# include
+#include
+#ifdef HAVE_SYS_TYPES_H
+# include
#endif
-#ifdef HAVE_STDLIB_H
+#ifdef HAVE_SYS_STAT_H
+# include
+#endif
+#ifdef STDC_HEADERS
# include
+# include
+#else
+# ifdef HAVE_STDLIB_H
+# include
+# endif
#endif
#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include
+# endif
# include
#endif
+#ifdef HAVE_STRINGS_H
+# include
+#endif
#ifdef HAVE_INTTYPES_H
# include
#endif
#ifdef HAVE_STDINT_H
# include
#endif
-#ifdef HAVE_STRINGS_H
-# include
-#endif
-#ifdef HAVE_SYS_TYPES_H
-# include
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include
-#endif
#ifdef HAVE_UNISTD_H
# include
#endif"
-ac_header_c_list=
ac_subst_vars='LTLIBOBJS
LIBOBJS
BUILD_CFLAGS
AMALGAMATION_LINE_MACROS
USE_GCOV
OPT_FEATURE_FLAGS
-OPT_WASM_RUNTIME
-CARGO_BIN
HAVE_ZLIB
USE_AMALGAMATION
TARGET_DEBUG
@@ -839,6 +810,7 @@ TCLSH_CMD
INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
+CPP
OTOOL64
OTOOL
LIPO
@@ -893,7 +865,6 @@ infodir
docdir
oldincludedir
includedir
-runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -939,10 +910,6 @@ enable_amalgamation
enable_load_extension
enable_math
enable_json
-enable_vector
-enable_wasm_runtime
-enable_wasm_runtime_dynamic
-enable_wasm_runtime_wasmedge
enable_all
enable_memsys5
enable_memsys3
@@ -963,6 +930,7 @@ CFLAGS
LDFLAGS
LIBS
CPPFLAGS
+CPP
TCLLIBDIR'
@@ -1002,7 +970,6 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
-runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1032,6 +999,8 @@ do
*) ac_optarg=yes ;;
esac
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
@@ -1072,9 +1041,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ as_fn_error $? "invalid feature name: $ac_useropt"
ac_useropt_orig=$ac_useropt
- ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -1098,9 +1067,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ as_fn_error $? "invalid feature name: $ac_useropt"
ac_useropt_orig=$ac_useropt
- ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
@@ -1253,15 +1222,6 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
- -runstatedir | --runstatedir | --runstatedi | --runstated \
- | --runstate | --runstat | --runsta | --runst | --runs \
- | --run | --ru | --r)
- ac_prev=runstatedir ;;
- -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
- | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
- | --run=* | --ru=* | --r=*)
- runstatedir=$ac_optarg ;;
-
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1311,9 +1271,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: \`$ac_useropt'"
+ as_fn_error $? "invalid package name: $ac_useropt"
ac_useropt_orig=$ac_useropt
- ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1327,9 +1287,9 @@ do
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: \`$ac_useropt'"
+ as_fn_error $? "invalid package name: $ac_useropt"
ac_useropt_orig=$ac_useropt
- ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
@@ -1373,9 +1333,9 @@ Try \`$0 --help' for more information"
*)
# FIXME: should be removed in autoconf 3.0.
- printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
@@ -1391,7 +1351,7 @@ if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
@@ -1399,7 +1359,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir runstatedir
+ libdir localedir mandir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1455,7 +1415,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-printf "%s\n" X"$as_myself" |
+$as_echo X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -1512,7 +1472,7 @@ if test "$ac_init_help" = "long"; then
# 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.
cat <<_ACEOF
-\`configure' configures sqlite 3.45.1 to adapt to many kinds of systems.
+\`configure' configures sqlite 3.46.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1552,7 +1512,6 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1578,7 +1537,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of sqlite 3.45.1:";;
+ short | recursive ) echo "Configuration of sqlite 3.46.1:";;
esac
cat <<\_ACEOF
@@ -1606,13 +1565,6 @@ Optional Features:
Disable loading of external extensions
--disable-math Disable math functions
--disable-json Disable JSON functions
- --disable-vector Disable vector functions
- --enable-wasm-runtime Enable WebAssembly runtime integration
- --enable-wasm-runtime-dynamic
- Link with WebAssembly runtime dynamically
- --enable-wasm-runtime-wasmedge
- Enable WebAssembly runtime integration (WasmEdge
- library)
--enable-all Enable FTS4, FTS5, Geopoly, RTree, Sessions
--enable-memsys5 Enable MEMSYS5
--enable-memsys3 Enable MEMSYS3
@@ -1647,6 +1599,7 @@ Some influential environment variables:
LIBS libraries to pass to the linker, e.g. -l
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if
you have headers in a nonstandard directory
+ CPP C preprocessor
TCLLIBDIR Where to install tcl plugin
Use these variables to override the choices made by `configure' or to help
@@ -1668,9 +1621,9 @@ if test "$ac_init_help" = "recursive"; then
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1698,8 +1651,7 @@ esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for configure.gnu first; this name is used for a wrapper for
- # Metaconfig's "Configure" on case-insensitive file systems.
+ # Check for guested configure.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1707,7 +1659,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
- printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
@@ -1716,10 +1668,10 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-sqlite configure 3.45.1
+sqlite configure 3.46.1
generated by GNU Autoconf 2.69
-Copyright (C) 2021 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
@@ -1736,14 +1688,14 @@ fi
ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest.beam
+ rm -f conftest.$ac_objext
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-printf "%s\n" "$ac_try_echo"; } >&5
+$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1751,15 +1703,14 @@ printf "%s\n" "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
- } && test -s conftest.$ac_objext
-then :
+ } && test -s conftest.$ac_objext; then :
ac_retval=0
-else $as_nop
- printf "%s\n" "$as_me: failed program was:" >&5
+else
+ $as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1775,14 +1726,14 @@ fi
ac_fn_c_try_link ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
+ rm -f conftest.$ac_objext conftest$ac_exeext
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-printf "%s\n" "$ac_try_echo"; } >&5
+$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -1790,18 +1741,17 @@ printf "%s\n" "$ac_try_echo"; } >&5
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes ||
test -x conftest$ac_exeext
- }
-then :
+ }; then :
ac_retval=0
-else $as_nop
- printf "%s\n" "$as_me: failed program was:" >&5
+else
+ $as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
@@ -1823,44 +1773,120 @@ fi
ac_fn_c_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-printf %s "checking for $2... " >&6; }
-if eval test \${$3+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
+if ac_fn_c_try_compile "$LINENO"; then :
eval "$3=yes"
-else $as_nop
+else
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
eval ac_res=\$$3
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-printf "%s\n" "$ac_res" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_compile
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
# ac_fn_c_check_func LINENO FUNC VAR
# ----------------------------------
# Tests whether FUNC exists, setting the cache variable VAR accordingly
ac_fn_c_check_func ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-printf %s "checking for $2... " >&6; }
-if eval test \${$3+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Define $2 to an innocuous variant, in case declares $2.
@@ -1868,9 +1894,16 @@ else $as_nop
#define $2 innocuous_$2
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below. */
+ which can conflict with char $2 (); below.
+ Prefer to if __STDC__ is defined, since
+ exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include
+#else
+# include
+#endif
-#include
#undef $2
/* Override any GCC internal prototype to avoid an error.
@@ -1888,25 +1921,24 @@ choke me
#endif
int
-main (void)
+main ()
{
return $2 ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
eval "$3=yes"
-else $as_nop
+else
eval "$3=no"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
eval ac_res=\$$3
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-printf "%s\n" "$ac_res" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_func
@@ -1918,18 +1950,17 @@ printf "%s\n" "$ac_res" >&6; }
ac_fn_c_check_type ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-printf %s "checking for $2... " >&6; }
-if eval test \${$3+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
eval "$3=no"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main (void)
+main ()
{
if (sizeof ($2))
return 0;
@@ -1937,13 +1968,12 @@ if (sizeof ($2))
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
+if ac_fn_c_try_compile "$LINENO"; then :
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
int
-main (void)
+main ()
{
if (sizeof (($2)))
return 0;
@@ -1951,50 +1981,116 @@ if (sizeof (($2)))
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
+if ac_fn_c_try_compile "$LINENO"; then :
-else $as_nop
+else
eval "$3=yes"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
eval ac_res=\$$3
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-printf "%s\n" "$ac_res" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_type
-ac_configure_args_raw=
-for ac_arg
-do
- case $ac_arg in
- *\'*)
- ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append ac_configure_args_raw " '$ac_arg'"
-done
-case $ac_configure_args_raw in
- *$as_nl*)
- ac_safe_unquote= ;;
- *)
- ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
- ac_unsafe_a="$ac_unsafe_z#~"
- ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
- ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval \${$3+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+} # ac_fn_c_check_header_mongrel
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by sqlite $as_me 3.45.1, which was
+It was created by sqlite $as_me 3.46.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
- $ $0$ac_configure_args_raw
+ $ $0 $@
_ACEOF
exec 5>>config.log
@@ -2027,12 +2123,8 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- printf "%s\n" "PATH: $as_dir"
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
done
IFS=$as_save_IFS
@@ -2067,7 +2159,7 @@ do
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
- ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -2102,13 +2194,11 @@ done
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
- # Sanitize IFS.
- IFS=" "" $as_nl"
# Save into config.log some information that might help in debugging.
{
echo
- printf "%s\n" "## ---------------- ##
+ $as_echo "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
@@ -2119,8 +2209,8 @@ trap 'exit_status=$?
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -2144,7 +2234,7 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;}
)
echo
- printf "%s\n" "## ----------------- ##
+ $as_echo "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
@@ -2152,14 +2242,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;}
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- printf "%s\n" "$ac_var='\''$ac_val'\''"
+ $as_echo "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
- printf "%s\n" "## ------------------- ##
+ $as_echo "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
@@ -2167,15 +2257,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;}
do
eval ac_val=\$$ac_var
case $ac_val in
- *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
- printf "%s\n" "$ac_var='\''$ac_val'\''"
+ $as_echo "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
- printf "%s\n" "## ----------- ##
+ $as_echo "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
@@ -2183,8 +2273,8 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;}
echo
fi
test "$ac_signal" != 0 &&
- printf "%s\n" "$as_me: caught signal $ac_signal"
- printf "%s\n" "$as_me: exit $exit_status"
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2198,48 +2288,63 @@ ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
-printf "%s\n" "/* confdefs.h */" > confdefs.h
+$as_echo "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
-printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
-printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
-printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
-printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
-printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
-printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
- ac_site_files="$CONFIG_SITE"
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
elif test "x$prefix" != xNONE; then
- ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
else
- ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
fi
-
-for ac_site_file in $ac_site_files
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
do
- case $ac_site_file in #(
- */*) :
- ;; #(
- *) :
- ac_site_file=./$ac_site_file ;;
-esac
- if test -f "$ac_site_file" && test -r "$ac_site_file"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
- || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
@@ -2249,434 +2354,19 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
-# Test code for whether the C compiler supports C89 (global declarations)
-ac_c_conftest_c89_globals='
-/* Does the compiler advertise C89 conformance?
- Do not test the value of __STDC__, because some compilers set it to 0
- while being otherwise adequately conformant. */
-#if !defined __STDC__
-# error "Compiler does not advertise C89 conformance"
-#endif
-
-#include
-#include
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
-struct buf { int x; };
-struct buf * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not \xHH hex character constants.
- These do not provoke an error unfortunately, instead are silently treated
- as an "x". The following induces an error, until -std is added to get
- proper ANSI mode. Curiously \x00 != x always comes out true, for an
- array size at least. It is necessary to write \x00 == 0 to get something
- that is true only with -std. */
-int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) '\''x'\''
-int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
- int, int);'
-
-# Test code for whether the C compiler supports C89 (body of main).
-ac_c_conftest_c89_main='
-ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
-'
-
-# Test code for whether the C compiler supports C99 (global declarations)
-ac_c_conftest_c99_globals='
-// Does the compiler advertise C99 conformance?
-#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
-# error "Compiler does not advertise C99 conformance"
-#endif
-
-#include
-extern int puts (const char *);
-extern int printf (const char *, ...);
-extern int dprintf (int, const char *, ...);
-extern void *malloc (size_t);
-
-// Check varargs macros. These examples are taken from C99 6.10.3.5.
-// dprintf is used instead of fprintf to avoid needing to declare
-// FILE and stderr.
-#define debug(...) dprintf (2, __VA_ARGS__)
-#define showlist(...) puts (#__VA_ARGS__)
-#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
-static void
-test_varargs_macros (void)
-{
- int x = 1234;
- int y = 5678;
- debug ("Flag");
- debug ("X = %d\n", x);
- showlist (The first, second, and third items.);
- report (x>y, "x is %d but y is %d", x, y);
-}
-
-// Check long long types.
-#define BIG64 18446744073709551615ull
-#define BIG32 4294967295ul
-#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
-#if !BIG_OK
- #error "your preprocessor is broken"
-#endif
-#if BIG_OK
-#else
- #error "your preprocessor is broken"
-#endif
-static long long int bignum = -9223372036854775807LL;
-static unsigned long long int ubignum = BIG64;
-
-struct incomplete_array
-{
- int datasize;
- double data[];
-};
-
-struct named_init {
- int number;
- const wchar_t *name;
- double average;
-};
-
-typedef const char *ccp;
-
-static inline int
-test_restrict (ccp restrict text)
-{
- // See if C++-style comments work.
- // Iterate through items via the restricted pointer.
- // Also check for declarations in for loops.
- for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
- continue;
- return 0;
-}
-
-// Check varargs and va_copy.
-static bool
-test_varargs (const char *format, ...)
-{
- va_list args;
- va_start (args, format);
- va_list args_copy;
- va_copy (args_copy, args);
-
- const char *str = "";
- int number = 0;
- float fnumber = 0;
-
- while (*format)
- {
- switch (*format++)
- {
- case '\''s'\'': // string
- str = va_arg (args_copy, const char *);
- break;
- case '\''d'\'': // int
- number = va_arg (args_copy, int);
- break;
- case '\''f'\'': // float
- fnumber = va_arg (args_copy, double);
- break;
- default:
- break;
- }
- }
- va_end (args_copy);
- va_end (args);
-
- return *str && number && fnumber;
-}
-'
-
-# Test code for whether the C compiler supports C99 (body of main).
-ac_c_conftest_c99_main='
- // Check bool.
- _Bool success = false;
- success |= (argc != 0);
-
- // Check restrict.
- if (test_restrict ("String literal") == 0)
- success = true;
- char *restrict newvar = "Another string";
-
- // Check varargs.
- success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
- test_varargs_macros ();
-
- // Check flexible array members.
- struct incomplete_array *ia =
- malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
- ia->datasize = 10;
- for (int i = 0; i < ia->datasize; ++i)
- ia->data[i] = i * 1.234;
-
- // Check named initializers.
- struct named_init ni = {
- .number = 34,
- .name = L"Test wide string",
- .average = 543.34343,
- };
-
- ni.number = 58;
-
- int dynamic_array[ni.number];
- dynamic_array[0] = argv[0][0];
- dynamic_array[ni.number - 1] = 543;
-
- // work around unused variable warnings
- ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
- || dynamic_array[ni.number - 1] != 543);
-'
-
-# Test code for whether the C compiler supports C11 (global declarations)
-ac_c_conftest_c11_globals='
-// Does the compiler advertise C11 conformance?
-#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
-# error "Compiler does not advertise C11 conformance"
-#endif
-
-// Check _Alignas.
-char _Alignas (double) aligned_as_double;
-char _Alignas (0) no_special_alignment;
-extern char aligned_as_int;
-char _Alignas (0) _Alignas (int) aligned_as_int;
-
-// Check _Alignof.
-enum
-{
- int_alignment = _Alignof (int),
- int_array_alignment = _Alignof (int[100]),
- char_alignment = _Alignof (char)
-};
-_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
-
-// Check _Noreturn.
-int _Noreturn does_not_return (void) { for (;;) continue; }
-
-// Check _Static_assert.
-struct test_static_assert
-{
- int x;
- _Static_assert (sizeof (int) <= sizeof (long int),
- "_Static_assert does not work in struct");
- long int y;
-};
-
-// Check UTF-8 literals.
-#define u8 syntax error!
-char const utf8_literal[] = u8"happens to be ASCII" "another string";
-
-// Check duplicate typedefs.
-typedef long *long_ptr;
-typedef long int *long_ptr;
-typedef long_ptr long_ptr;
-
-// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
-struct anonymous
-{
- union {
- struct { int i; int j; };
- struct { int k; long int l; } w;
- };
- int m;
-} v1;
-'
-
-# Test code for whether the C compiler supports C11 (body of main).
-ac_c_conftest_c11_main='
- _Static_assert ((offsetof (struct anonymous, i)
- == offsetof (struct anonymous, w.k)),
- "Anonymous union alignment botch");
- v1.i = 2;
- v1.w.k = 5;
- ok |= v1.i != 5;
-'
-
-# Test code for whether the C compiler supports C11 (complete).
-ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
-${ac_c_conftest_c99_globals}
-${ac_c_conftest_c11_globals}
-
-int
-main (int argc, char **argv)
-{
- int ok = 0;
- ${ac_c_conftest_c89_main}
- ${ac_c_conftest_c99_main}
- ${ac_c_conftest_c11_main}
- return ok;
-}
-"
-
-# Test code for whether the C compiler supports C99 (complete).
-ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
-${ac_c_conftest_c99_globals}
-
-int
-main (int argc, char **argv)
-{
- int ok = 0;
- ${ac_c_conftest_c89_main}
- ${ac_c_conftest_c99_main}
- return ok;
-}
-"
-
-# Test code for whether the C compiler supports C89 (complete).
-ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
-
-int
-main (int argc, char **argv)
-{
- int ok = 0;
- ${ac_c_conftest_c89_main}
- return ok;
-}
-"
-
-as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
-as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
-as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
-as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
-as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
-as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
-as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
-as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
-as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
-
-# Auxiliary files required by this configure script.
-ac_aux_files="install-sh config.guess config.sub ltmain.sh"
-
-# Locations in which to look for auxiliary files.
-ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.."
-
-# Search for a directory containing all of the required auxiliary files,
-# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
-# If we don't find one directory that contains all the files we need,
-# we report the set of missing files from the *first* directory in
-# $ac_aux_dir_candidates and give up.
-ac_missing_aux_files=""
-ac_first_candidate=:
-printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in $ac_aux_dir_candidates
-do
- IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- as_found=:
-
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
- ac_aux_dir_found=yes
- ac_install_sh=
- for ac_aux in $ac_aux_files
- do
- # As a special case, if "install-sh" is required, that requirement
- # can be satisfied by any of "install-sh", "install.sh", or "shtool",
- # and $ac_install_sh is set appropriately for whichever one is found.
- if test x"$ac_aux" = x"install-sh"
- then
- if test -f "${as_dir}install-sh"; then
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
- ac_install_sh="${as_dir}install-sh -c"
- elif test -f "${as_dir}install.sh"; then
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
- ac_install_sh="${as_dir}install.sh -c"
- elif test -f "${as_dir}shtool"; then
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
- ac_install_sh="${as_dir}shtool install -c"
- else
- ac_aux_dir_found=no
- if $ac_first_candidate; then
- ac_missing_aux_files="${ac_missing_aux_files} install-sh"
- else
- break
- fi
- fi
- else
- if test -f "${as_dir}${ac_aux}"; then
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
- else
- ac_aux_dir_found=no
- if $ac_first_candidate; then
- ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
- else
- break
- fi
- fi
- fi
- done
- if test "$ac_aux_dir_found" = yes; then
- ac_aux_dir="$as_dir"
- break
- fi
- ac_first_candidate=false
-
- as_found=false
-done
-IFS=$as_save_IFS
-if $as_found
-then :
-
-else $as_nop
- as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
-fi
-
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-if test -f "${ac_aux_dir}config.guess"; then
- ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
-fi
-if test -f "${ac_aux_dir}config.sub"; then
- ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
-fi
-if test -f "$ac_aux_dir/configure"; then
- ac_configure="$SHELL ${ac_aux_dir}configure"
-fi
-
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -2687,12 +2377,12 @@ for ac_var in $ac_precious_vars; do
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
@@ -2701,24 +2391,24 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
@@ -2728,12 +2418,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
fi
done
if $ac_cache_corrupted; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
- and start over" "$LINENO" 5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
@@ -2760,8 +2449,8 @@ fi
#
case `pwd` in
*\ * | *\ *)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
esac
@@ -2781,33 +2470,57 @@ macro_revision='1.3012'
-
-
ltmain="$ac_aux_dir/ltmain.sh"
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
- # Make sure we can run config.sub.
-$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-printf %s "checking build system type... " >&6; }
-if test ${ac_cv_build+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-printf "%s\n" "$ac_cv_build" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -2826,22 +2539,21 @@ IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-printf %s "checking host system type... " >&6; }
-if test ${ac_cv_host+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
- ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
- as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-printf "%s\n" "$ac_cv_host" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -2860,15 +2572,6 @@ IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-
-
-
-
-
-
-
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2877,12 +2580,11 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_CC+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2890,15 +2592,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2909,11 +2607,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-printf "%s\n" "$CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -2922,12 +2620,11 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_CC+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -2935,15 +2632,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -2954,11 +2647,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-printf "%s\n" "$ac_ct_CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
@@ -2966,8 +2659,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
@@ -2980,12 +2673,11 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_CC+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -2993,15 +2685,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3012,11 +2700,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-printf "%s\n" "$CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -3025,12 +2713,11 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_CC+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -3039,19 +2726,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
- if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3067,18 +2750,18 @@ if test $ac_prog_rejected = yes; then
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-printf "%s\n" "$CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -3089,12 +2772,11 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_CC+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
@@ -3102,15 +2784,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3121,11 +2799,11 @@ fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-printf "%s\n" "$CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -3138,12 +2816,11 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_CC+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
@@ -3151,15 +2828,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -3170,11 +2843,11 @@ fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-printf "%s\n" "$ac_ct_CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -3186,138 +2859,34 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
-set dummy ${ac_tool_prefix}clang; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_CC+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}clang"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-printf "%s\n" "$CC" >&6; }
-else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "clang", so it can be a program name with args.
-set dummy clang; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_CC+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="clang"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-printf "%s\n" "$ac_ct_CC" >&6; }
-else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
fi
-else
- CC="$ac_cv_prog_CC"
fi
fi
-test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
-printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
-for ac_option in --version -v -V -qversion -version; do
+for ac_option in --version -v -V -qversion; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-printf "%s\n" "$ac_try_echo"; } >&5
+$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
@@ -3327,7 +2896,7 @@ printf "%s\n" "$ac_try_echo"; } >&5
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
@@ -3335,7 +2904,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main (void)
+main ()
{
;
@@ -3347,9 +2916,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-printf %s "checking whether the C compiler works... " >&6; }
-ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
# The possible output files:
ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -3370,12 +2939,11 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-printf "%s\n" "$ac_try_echo"; } >&5
+$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link_default") 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-then :
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
@@ -3392,7 +2960,7 @@ do
# certainly right.
break;;
*.* )
- if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
then :; else
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
@@ -3408,46 +2976,44 @@ do
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
-else $as_nop
+else
ac_file=''
fi
-if test -z "$ac_file"
-then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-printf "%s\n" "$as_me: failed program was:" >&5
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-printf %s "checking for C compiler default output file name... " >&6; }
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-printf "%s\n" "$ac_file" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
ac_exeext=$ac_cv_exeext
rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-printf %s "checking for suffix of executables... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-printf "%s\n" "$ac_try_echo"; } >&5
+$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-then :
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -3461,15 +3027,15 @@ for ac_file in conftest.exe conftest conftest.*; do
* ) break;;
esac
done
-else $as_nop
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-printf "%s\n" "$ac_cv_exeext" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
@@ -3478,7 +3044,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
-main (void)
+main ()
{
FILE *f = fopen ("conftest.out", "w");
return ferror (f) || fclose (f) != 0;
@@ -3490,8 +3056,8 @@ _ACEOF
ac_clean_files="$ac_clean_files conftest.out"
# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-printf %s "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
if test "$cross_compiling" != yes; then
{ { ac_try="$ac_link"
case "(($ac_try" in
@@ -3499,10 +3065,10 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-printf "%s\n" "$ac_try_echo"; } >&5
+$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
if { ac_try='./conftest$ac_cv_exeext'
{ { case "(($ac_try" in
@@ -3510,40 +3076,39 @@ printf "%s\n" "$ac_try_echo"; } >&5
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-printf "%s\n" "$ac_try_echo"; } >&5
+$as_echo "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot run C compiled programs.
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-printf "%s\n" "$cross_compiling" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
ac_clean_files=$ac_clean_files_save
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-printf %s "checking for suffix of object files... " >&6; }
-if test ${ac_cv_objext+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main (void)
+main ()
{
;
@@ -3557,12 +3122,11 @@ case "(($ac_try" in
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-printf "%s\n" "$ac_try_echo"; } >&5
+$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-then :
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
for ac_file in conftest.o conftest.obj conftest.*; do
test -f "$ac_file" || continue;
case $ac_file in
@@ -3571,32 +3135,31 @@ then :
break;;
esac
done
-else $as_nop
- printf "%s\n" "$as_me: failed program was:" >&5
+else
+ $as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-printf "%s\n" "$ac_cv_objext" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
-printf %s "checking whether the compiler supports GNU C... " >&6; }
-if test ${ac_cv_c_compiler_gnu+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main (void)
+main ()
{
#ifndef __GNUC__
choke me
@@ -3606,33 +3169,29 @@ main (void)
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
+if ac_fn_c_try_compile "$LINENO"; then :
ac_compiler_gnu=yes
-else $as_nop
+else
ac_compiler_gnu=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
if test $ac_compiler_gnu = yes; then
GCC=yes
else
GCC=
fi
-ac_test_CFLAGS=${CFLAGS+y}
+ac_test_CFLAGS=${CFLAGS+set}
ac_save_CFLAGS=$CFLAGS
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-printf %s "checking whether $CC accepts -g... " >&6; }
-if test ${ac_cv_prog_cc_g+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
@@ -3641,60 +3200,57 @@ else $as_nop
/* end confdefs.h. */
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_prog_cc_g=yes
-else $as_nop
+else
CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
+if ac_fn_c_try_compile "$LINENO"; then :
-else $as_nop
+else
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_prog_cc_g=yes
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
-if test $ac_test_CFLAGS; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
@@ -3709,144 +3265,94 @@ else
CFLAGS=
fi
fi
-ac_prog_cc_stdc=no
-if test x$ac_prog_cc_stdc = xno
-then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
-printf %s "checking for $CC option to enable C11 features... " >&6; }
-if test ${ac_cv_prog_cc_c11+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- ac_cv_prog_cc_c11=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_c_conftest_c11_program
-_ACEOF
-for ac_arg in '' -std=gnu11
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"
-then :
- ac_cv_prog_cc_c11=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam
- test "x$ac_cv_prog_cc_c11" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-fi
-
-if test "x$ac_cv_prog_cc_c11" = xno
-then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-printf "%s\n" "unsupported" >&6; }
-else $as_nop
- if test "x$ac_cv_prog_cc_c11" = x
-then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-printf "%s\n" "none needed" >&6; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
-printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
- CC="$CC $ac_cv_prog_cc_c11"
-fi
- ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
- ac_prog_cc_stdc=c11
-fi
-fi
-if test x$ac_prog_cc_stdc = xno
-then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
-printf %s "checking for $CC option to enable C99 features... " >&6; }
-if test ${ac_cv_prog_cc_c99+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- ac_cv_prog_cc_c99=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-$ac_c_conftest_c99_program
-_ACEOF
-for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"
-then :
- ac_cv_prog_cc_c99=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam
- test "x$ac_cv_prog_cc_c99" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-fi
+#include
+#include
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
-if test "x$ac_cv_prog_cc_c99" = xno
-then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-printf "%s\n" "unsupported" >&6; }
-else $as_nop
- if test "x$ac_cv_prog_cc_c99" = x
-then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-printf "%s\n" "none needed" >&6; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
-printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
- CC="$CC $ac_cv_prog_cc_c99"
-fi
- ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
- ac_prog_cc_stdc=c99
-fi
-fi
-if test x$ac_prog_cc_stdc = xno
-then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
-printf %s "checking for $CC option to enable C89 features... " >&6; }
-if test ${ac_cv_prog_cc_c89+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_c_conftest_c89_program
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"
-then :
+ if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_prog_cc_c89=$ac_arg
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam
+rm -f core conftest.err conftest.$ac_objext
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC
-fi
-if test "x$ac_cv_prog_cc_c89" = xno
-then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-printf "%s\n" "unsupported" >&6; }
-else $as_nop
- if test "x$ac_cv_prog_cc_c89" = x
-then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-printf "%s\n" "none needed" >&6; }
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
- CC="$CC $ac_cv_prog_cc_c89"
-fi
- ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
- ac_prog_cc_stdc=c89
fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
fi
ac_ext=c
@@ -3855,12 +3361,11 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-printf %s "checking for a sed that does not truncate output... " >&6; }
-if test ${ac_cv_path_SED+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
for ac_i in 1 2 3 4 5 6 7; do
ac_script="$ac_script$as_nl$ac_script"
@@ -3874,15 +3379,10 @@ else $as_nop
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- for ac_prog in sed gsed
- do
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_SED" || continue
# Check for GNU ac_path_SED and select it if it is found.
# Check for GNU $ac_path_SED
@@ -3891,13 +3391,13 @@ case `"$ac_path_SED" --version 2>&1` in
ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
*)
ac_count=0
- printf %s 0123456789 >"conftest.in"
+ $as_echo_n 0123456789 >"conftest.in"
while :
do
cat "conftest.in" "conftest.in" >"conftest.tmp"
mv "conftest.tmp" "conftest.in"
cp "conftest.in" "conftest.nl"
- printf "%s\n" '' >> "conftest.nl"
+ $as_echo '' >> "conftest.nl"
"$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
as_fn_arith $ac_count + 1 && ac_count=$as_val
@@ -3925,8 +3425,8 @@ else
fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-printf "%s\n" "$ac_cv_path_SED" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
SED="$ac_cv_path_SED"
rm -f conftest.sed
@@ -3943,12 +3443,11 @@ Xsed="$SED -e 1s/^X//"
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-printf %s "checking for grep that handles long lines and -e... " >&6; }
-if test ${ac_cv_path_GREP+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -z "$GREP"; then
ac_path_GREP_found=false
# Loop through the user's path and test for each of PROGNAME-LIST
@@ -3956,15 +3455,10 @@ else $as_nop
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- for ac_prog in grep ggrep
- do
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_GREP" || continue
# Check for GNU ac_path_GREP and select it if it is found.
# Check for GNU $ac_path_GREP
@@ -3973,13 +3467,13 @@ case `"$ac_path_GREP" --version 2>&1` in
ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
*)
ac_count=0
- printf %s 0123456789 >"conftest.in"
+ $as_echo_n 0123456789 >"conftest.in"
while :
do
cat "conftest.in" "conftest.in" >"conftest.tmp"
mv "conftest.tmp" "conftest.in"
cp "conftest.in" "conftest.nl"
- printf "%s\n" 'GREP' >> "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
"$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
as_fn_arith $ac_count + 1 && ac_count=$as_val
@@ -4007,17 +3501,16 @@ else
fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-printf "%s\n" "$ac_cv_path_GREP" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
GREP="$ac_cv_path_GREP"
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-printf %s "checking for egrep... " >&6; }
-if test ${ac_cv_path_EGREP+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
then ac_cv_path_EGREP="$GREP -E"
else
@@ -4028,15 +3521,10 @@ else $as_nop
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- for ac_prog in egrep
- do
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_EGREP" || continue
# Check for GNU ac_path_EGREP and select it if it is found.
# Check for GNU $ac_path_EGREP
@@ -4045,13 +3533,13 @@ case `"$ac_path_EGREP" --version 2>&1` in
ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
*)
ac_count=0
- printf %s 0123456789 >"conftest.in"
+ $as_echo_n 0123456789 >"conftest.in"
while :
do
cat "conftest.in" "conftest.in" >"conftest.tmp"
mv "conftest.tmp" "conftest.in"
cp "conftest.in" "conftest.nl"
- printf "%s\n" 'EGREP' >> "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
"$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
as_fn_arith $ac_count + 1 && ac_count=$as_val
@@ -4080,17 +3568,16 @@ fi
fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-printf "%s\n" "$ac_cv_path_EGREP" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
EGREP="$ac_cv_path_EGREP"
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
-printf %s "checking for fgrep... " >&6; }
-if test ${ac_cv_path_FGREP+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
then ac_cv_path_FGREP="$GREP -F"
else
@@ -4101,15 +3588,10 @@ else $as_nop
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- for ac_prog in fgrep
- do
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in fgrep; do
for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext"
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_FGREP" || continue
# Check for GNU ac_path_FGREP and select it if it is found.
# Check for GNU $ac_path_FGREP
@@ -4118,13 +3600,13 @@ case `"$ac_path_FGREP" --version 2>&1` in
ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
*)
ac_count=0
- printf %s 0123456789 >"conftest.in"
+ $as_echo_n 0123456789 >"conftest.in"
while :
do
cat "conftest.in" "conftest.in" >"conftest.tmp"
mv "conftest.tmp" "conftest.in"
cp "conftest.in" "conftest.nl"
- printf "%s\n" 'FGREP' >> "conftest.nl"
+ $as_echo 'FGREP' >> "conftest.nl"
"$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
as_fn_arith $ac_count + 1 && ac_count=$as_val
@@ -4153,8 +3635,8 @@ fi
fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
-printf "%s\n" "$ac_cv_path_FGREP" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
FGREP="$ac_cv_path_FGREP"
@@ -4179,18 +3661,17 @@ test -z "$GREP" && GREP=grep
# Check whether --with-gnu-ld was given.
-if test ${with_gnu_ld+y}
-then :
+if test "${with_gnu_ld+set}" = set; then :
withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else $as_nop
+else
with_gnu_ld=no
fi
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-printf %s "checking for ld used by $CC... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -4219,16 +3700,15 @@ printf %s "checking for ld used by $CC... " >&6; }
;;
esac
elif test "$with_gnu_ld" = yes; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-printf %s "checking for GNU ld... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-printf %s "checking for non-GNU ld... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
fi
-if test ${lt_cv_path_LD+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+if ${lt_cv_path_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -z "$LD"; then
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
@@ -4257,19 +3737,18 @@ fi
LD="$lt_cv_path_LD"
if test -n "$LD"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-printf "%s\n" "$LD" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
-if test ${lt_cv_prog_gnu_ld+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
# I'd rather use --version here, but apparently some GNU lds only accept -v.
case `$LD -v 2>&1 &1 &5
-printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
with_gnu_ld=$lt_cv_prog_gnu_ld
@@ -4292,12 +3771,11 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
-printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if test ${lt_cv_path_NM+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$NM"; then
# Let the user override the test.
lt_cv_path_NM="$NM"
@@ -4342,8 +3820,8 @@ else
: ${lt_cv_path_NM=no}
fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
-printf "%s\n" "$lt_cv_path_NM" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
if test "$lt_cv_path_NM" != "no"; then
NM="$lt_cv_path_NM"
else
@@ -4353,12 +3831,11 @@ else
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_DUMPBIN+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$DUMPBIN"; then
ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
else
@@ -4366,15 +3843,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4385,11 +3858,11 @@ fi
fi
DUMPBIN=$ac_cv_prog_DUMPBIN
if test -n "$DUMPBIN"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
-printf "%s\n" "$DUMPBIN" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -4402,12 +3875,11 @@ if test -z "$DUMPBIN"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_DUMPBIN+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_DUMPBIN"; then
ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
else
@@ -4415,15 +3887,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4434,11 +3902,11 @@ fi
fi
ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
if test -n "$ac_ct_DUMPBIN"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
-printf "%s\n" "$ac_ct_DUMPBIN" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -4450,8 +3918,8 @@ done
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
DUMPBIN=$ac_ct_DUMPBIN
@@ -4470,48 +3938,46 @@ test -z "$NM" && NM=nm
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
-printf %s "checking the name lister ($NM) interface... " >&6; }
-if test ${lt_cv_nm_interface+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
lt_cv_nm_interface="BSD nm"
echo "int some_variable = 0;" > conftest.$ac_ext
- (eval echo "\"\$as_me:4481: $ac_compile\"" >&5)
+ (eval echo "\"\$as_me:3948: $ac_compile\"" >&5)
(eval "$ac_compile" 2>conftest.err)
cat conftest.err >&5
- (eval echo "\"\$as_me:4484: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval echo "\"\$as_me:3951: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
cat conftest.err >&5
- (eval echo "\"\$as_me:4487: output\"" >&5)
+ (eval echo "\"\$as_me:3954: output\"" >&5)
cat conftest.out >&5
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
lt_cv_nm_interface="MS dumpbin"
fi
rm -f conftest*
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
-printf "%s\n" "$lt_cv_nm_interface" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-printf %s "checking whether ln -s works... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
LN_S=$as_ln_s
if test "$LN_S" = "ln -s"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-printf "%s\n" "no, using $LN_S" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
fi
# find the maximum length of command line arguments
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
-printf %s "checking the maximum length of command line arguments... " >&6; }
-if test ${lt_cv_sys_max_cmd_len+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
i=0
teststring="ABCD"
@@ -4627,11 +4093,11 @@ else $as_nop
fi
if test -n $lt_cv_sys_max_cmd_len ; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
-printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5
-printf "%s\n" "none" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
fi
max_cmd_len=$lt_cv_sys_max_cmd_len
@@ -4644,8 +4110,8 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
: ${MV="mv -f"}
: ${RM="rm -f"}
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
-printf %s "checking whether the shell understands some XSI constructs... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
# Try some XSI features
xsi_shell=no
( _lt_dummy="a/b/c"
@@ -4654,18 +4120,18 @@ xsi_shell=no
&& eval 'test $(( 1 + 1 )) -eq 2 \
&& test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
&& xsi_shell=yes
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
-printf "%s\n" "$xsi_shell" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
-printf %s "checking whether the shell understands \"+=\"... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
lt_shell_append=no
( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
>/dev/null 2>&1 \
&& lt_shell_append=yes
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
-printf "%s\n" "$lt_shell_append" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
@@ -4699,16 +4165,15 @@ esac
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
-printf %s "checking for $LD option to reload object files... " >&6; }
-if test ${lt_cv_ld_reload_flag+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
lt_cv_ld_reload_flag='-r'
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
-printf "%s\n" "$lt_cv_ld_reload_flag" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
reload_flag=$lt_cv_ld_reload_flag
case $reload_flag in
"" | " "*) ;;
@@ -4736,12 +4201,11 @@ esac
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_OBJDUMP+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$OBJDUMP"; then
ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
else
@@ -4749,15 +4213,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4768,11 +4228,11 @@ fi
fi
OBJDUMP=$ac_cv_prog_OBJDUMP
if test -n "$OBJDUMP"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-printf "%s\n" "$OBJDUMP" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -4781,12 +4241,11 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
ac_ct_OBJDUMP=$OBJDUMP
# Extract the first word of "objdump", so it can be a program name with args.
set dummy objdump; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_OBJDUMP+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_OBJDUMP"; then
ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
else
@@ -4794,15 +4253,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_OBJDUMP="objdump"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -4813,11 +4268,11 @@ fi
fi
ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
if test -n "$ac_ct_OBJDUMP"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-printf "%s\n" "$ac_ct_OBJDUMP" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_OBJDUMP" = x; then
@@ -4825,8 +4280,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
OBJDUMP=$ac_ct_OBJDUMP
@@ -4845,12 +4300,11 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
-printf %s "checking how to recognize dependent libraries... " >&6; }
-if test ${lt_cv_deplibs_check_method+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
lt_cv_file_magic_cmd='$MAGIC_CMD'
lt_cv_file_magic_test_file=
lt_cv_deplibs_check_method='unknown'
@@ -5042,8 +4496,8 @@ tpf*)
esac
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
-printf "%s\n" "$lt_cv_deplibs_check_method" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
file_magic_cmd=$lt_cv_file_magic_cmd
deplibs_check_method=$lt_cv_deplibs_check_method
test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -5062,12 +4516,11 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_AR+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
@@ -5075,15 +4528,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_AR="${ac_tool_prefix}ar"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5094,11 +4543,11 @@ fi
fi
AR=$ac_cv_prog_AR
if test -n "$AR"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-printf "%s\n" "$AR" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -5107,12 +4556,11 @@ if test -z "$ac_cv_prog_AR"; then
ac_ct_AR=$AR
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_AR+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_AR"; then
ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
else
@@ -5120,15 +4568,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_AR="ar"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5139,11 +4583,11 @@ fi
fi
ac_ct_AR=$ac_cv_prog_ac_ct_AR
if test -n "$ac_ct_AR"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-printf "%s\n" "$ac_ct_AR" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_AR" = x; then
@@ -5151,8 +4595,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
AR=$ac_ct_AR
@@ -5177,12 +4621,11 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_STRIP+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$STRIP"; then
ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
else
@@ -5190,15 +4633,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5209,11 +4648,11 @@ fi
fi
STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-printf "%s\n" "$STRIP" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -5222,12 +4661,11 @@ if test -z "$ac_cv_prog_STRIP"; then
ac_ct_STRIP=$STRIP
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_STRIP+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_STRIP"; then
ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
else
@@ -5235,15 +4673,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_STRIP="strip"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5254,11 +4688,11 @@ fi
fi
ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
if test -n "$ac_ct_STRIP"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-printf "%s\n" "$ac_ct_STRIP" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_STRIP" = x; then
@@ -5266,8 +4700,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
STRIP=$ac_ct_STRIP
@@ -5286,12 +4720,11 @@ test -z "$STRIP" && STRIP=:
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_RANLIB+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
@@ -5299,15 +4732,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5318,11 +4747,11 @@ fi
fi
RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-printf "%s\n" "$RANLIB" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -5331,12 +4760,11 @@ if test -z "$ac_cv_prog_RANLIB"; then
ac_ct_RANLIB=$RANLIB
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_RANLIB+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_RANLIB"; then
ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
else
@@ -5344,15 +4772,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_RANLIB="ranlib"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5363,11 +4787,11 @@ fi
fi
ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
if test -n "$ac_ct_RANLIB"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-printf "%s\n" "$ac_ct_RANLIB" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_RANLIB" = x; then
@@ -5375,8 +4799,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
RANLIB=$ac_ct_RANLIB
@@ -5453,12 +4877,11 @@ compiler=$CC
# Check for command to grab the raw symbol name followed by C symbol from nm.
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
-printf %s "checking command to parse $NM output from $compiler object... " >&6; }
-if test ${lt_cv_sys_global_symbol_pipe+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
# These are sane defaults that work on at least a few old systems.
# [They come from Ultrix. What could be older than Ultrix?!! ;)]
@@ -5575,14 +4998,14 @@ _LT_EOF
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
# Now try to grab the symbols.
nlist=conftest.nm
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
(eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && test -s "$nlist"; then
# Try sorting and uniquifying the output.
if sort "$nlist" | uniq > "$nlist"T; then
@@ -5639,7 +5062,7 @@ _LT_EOF
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
(eval $ac_link) 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && test -s conftest${ac_exeext}; then
pipe_works=yes
fi
@@ -5674,11 +5097,11 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then
lt_cv_sys_global_symbol_to_cdecl=
fi
if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-printf "%s\n" "failed" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-printf "%s\n" "ok" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
fi
@@ -5704,8 +5127,7 @@ fi
# Check whether --enable-libtool-lock was given.
-if test ${enable_libtool_lock+y}
-then :
+if test "${enable_libtool_lock+set}" = set; then :
enableval=$enable_libtool_lock;
fi
@@ -5720,7 +5142,7 @@ ia64-*-hpux*)
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
case `/usr/bin/file conftest.$ac_objext` in
*ELF-32*)
@@ -5735,11 +5157,11 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 5738 "configure"' > conftest.$ac_ext
+ echo '#line 5160 "configure"' > conftest.$ac_ext
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
if test "$lt_cv_prog_gnu_ld" = yes; then
case `/usr/bin/file conftest.$ac_objext` in
@@ -5777,7 +5199,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
case `/usr/bin/file conftest.o` in
*32-bit*)
@@ -5827,12 +5249,11 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# On SCO OpenServer 5, we need -belf to get full-featured binaries.
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
-printf %s "checking whether the C compiler needs -belf... " >&6; }
-if test ${lt_cv_cc_needs_belf+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5843,20 +5264,19 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
/* end confdefs.h. */
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
lt_cv_cc_needs_belf=yes
-else $as_nop
+else
lt_cv_cc_needs_belf=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -5865,8 +5285,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
-printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
if test x"$lt_cv_cc_needs_belf" != x"yes"; then
# this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
CFLAGS="$SAVE_CFLAGS"
@@ -5878,7 +5298,7 @@ sparc*-*solaris*)
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
case `/usr/bin/file conftest.o` in
*64-bit*)
@@ -5905,12 +5325,11 @@ need_locks="$enable_libtool_lock"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_DSYMUTIL+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$DSYMUTIL"; then
ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
else
@@ -5918,15 +5337,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5937,11 +5352,11 @@ fi
fi
DSYMUTIL=$ac_cv_prog_DSYMUTIL
if test -n "$DSYMUTIL"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-printf "%s\n" "$DSYMUTIL" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -5950,12 +5365,11 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then
ac_ct_DSYMUTIL=$DSYMUTIL
# Extract the first word of "dsymutil", so it can be a program name with args.
set dummy dsymutil; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_DSYMUTIL+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_DSYMUTIL"; then
ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
else
@@ -5963,15 +5377,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -5982,11 +5392,11 @@ fi
fi
ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
if test -n "$ac_ct_DSYMUTIL"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-printf "%s\n" "$ac_ct_DSYMUTIL" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_DSYMUTIL" = x; then
@@ -5994,8 +5404,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
DSYMUTIL=$ac_ct_DSYMUTIL
@@ -6007,12 +5417,11 @@ fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_NMEDIT+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$NMEDIT"; then
ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
else
@@ -6020,15 +5429,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -6039,11 +5444,11 @@ fi
fi
NMEDIT=$ac_cv_prog_NMEDIT
if test -n "$NMEDIT"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
-printf "%s\n" "$NMEDIT" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -6052,12 +5457,11 @@ if test -z "$ac_cv_prog_NMEDIT"; then
ac_ct_NMEDIT=$NMEDIT
# Extract the first word of "nmedit", so it can be a program name with args.
set dummy nmedit; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_NMEDIT+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_NMEDIT"; then
ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
else
@@ -6065,15 +5469,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_NMEDIT="nmedit"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -6084,11 +5484,11 @@ fi
fi
ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
if test -n "$ac_ct_NMEDIT"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
-printf "%s\n" "$ac_ct_NMEDIT" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_NMEDIT" = x; then
@@ -6096,8 +5496,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
NMEDIT=$ac_ct_NMEDIT
@@ -6109,12 +5509,11 @@ fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
set dummy ${ac_tool_prefix}lipo; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_LIPO+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$LIPO"; then
ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
else
@@ -6122,15 +5521,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -6141,11 +5536,11 @@ fi
fi
LIPO=$ac_cv_prog_LIPO
if test -n "$LIPO"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
-printf "%s\n" "$LIPO" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -6154,12 +5549,11 @@ if test -z "$ac_cv_prog_LIPO"; then
ac_ct_LIPO=$LIPO
# Extract the first word of "lipo", so it can be a program name with args.
set dummy lipo; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_LIPO+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_LIPO"; then
ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
else
@@ -6167,15 +5561,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_LIPO="lipo"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -6186,11 +5576,11 @@ fi
fi
ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
if test -n "$ac_ct_LIPO"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
-printf "%s\n" "$ac_ct_LIPO" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_LIPO" = x; then
@@ -6198,8 +5588,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
LIPO=$ac_ct_LIPO
@@ -6211,12 +5601,11 @@ fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
set dummy ${ac_tool_prefix}otool; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_OTOOL+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$OTOOL"; then
ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
else
@@ -6224,15 +5613,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -6243,11 +5628,11 @@ fi
fi
OTOOL=$ac_cv_prog_OTOOL
if test -n "$OTOOL"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
-printf "%s\n" "$OTOOL" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -6256,12 +5641,11 @@ if test -z "$ac_cv_prog_OTOOL"; then
ac_ct_OTOOL=$OTOOL
# Extract the first word of "otool", so it can be a program name with args.
set dummy otool; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_OTOOL+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_OTOOL"; then
ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
else
@@ -6269,15 +5653,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_OTOOL="otool"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -6288,11 +5668,11 @@ fi
fi
ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
if test -n "$ac_ct_OTOOL"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
-printf "%s\n" "$ac_ct_OTOOL" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_OTOOL" = x; then
@@ -6300,8 +5680,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
OTOOL=$ac_ct_OTOOL
@@ -6313,12 +5693,11 @@ fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
set dummy ${ac_tool_prefix}otool64; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_OTOOL64+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$OTOOL64"; then
ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
else
@@ -6326,15 +5705,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -6345,11 +5720,11 @@ fi
fi
OTOOL64=$ac_cv_prog_OTOOL64
if test -n "$OTOOL64"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
-printf "%s\n" "$OTOOL64" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -6358,12 +5733,11 @@ if test -z "$ac_cv_prog_OTOOL64"; then
ac_ct_OTOOL64=$OTOOL64
# Extract the first word of "otool64", so it can be a program name with args.
set dummy otool64; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_OTOOL64+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$ac_ct_OTOOL64"; then
ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
else
@@ -6371,15 +5745,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_OTOOL64="otool64"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -6390,11 +5760,11 @@ fi
fi
ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
if test -n "$ac_ct_OTOOL64"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
-printf "%s\n" "$ac_ct_OTOOL64" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
if test "x$ac_ct_OTOOL64" = x; then
@@ -6402,8 +5772,8 @@ fi
else
case $cross_compiling:$ac_tool_warned in
yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
OTOOL64=$ac_ct_OTOOL64
@@ -6438,12 +5808,11 @@ fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
-printf %s "checking for -single_module linker flag... " >&6; }
-if test ${lt_cv_apple_cc_single_mod+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
lt_cv_apple_cc_single_mod=no
if test -z "${LT_MULTI_MODULE}"; then
# By default we will add the -single_module flag. You can override
@@ -6466,14 +5835,13 @@ else $as_nop
rm -f conftest.*
fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
-printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; }
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
-printf %s "checking for -exported_symbols_list linker flag... " >&6; }
-if test ${lt_cv_ld_exported_symbols_list+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
lt_cv_ld_exported_symbols_list=no
save_LDFLAGS=$LDFLAGS
echo "_main" > conftest.sym
@@ -6482,26 +5850,25 @@ else $as_nop
/* end confdefs.h. */
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
lt_cv_ld_exported_symbols_list=yes
-else $as_nop
+else
lt_cv_ld_exported_symbols_list=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LDFLAGS="$save_LDFLAGS"
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
-printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
case $host_os in
rhapsody* | darwin1.[012])
_lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
@@ -6537,43 +5904,286 @@ printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; }
;;
esac
-ac_header= ac_cache=
-for ac_item in $ac_header_c_list
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if ${ac_cv_prog_CPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer to if __STDC__ is defined, since
+ # exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include
+#else
+# include
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
do
- if test $ac_cache; then
- ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
- if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
- printf "%s\n" "#define $ac_item 1" >> confdefs.h
- fi
- ac_header= ac_cache=
- elif test $ac_header; then
- ac_cache=$ac_item
- else
- ac_header=$ac_item
- fi
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer to if __STDC__ is defined, since
+ # exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include
+#else
+# include
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+#include
+#include
+#include
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+#include
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
-then :
+fi
-printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
fi
-ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+
+done
+
+
+for ac_header in dlfcn.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
"
-if test "x$ac_cv_header_dlfcn_h" = xyes
-then :
- printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
fi
+done
+
# Set options
@@ -6587,8 +6197,7 @@ fi
# Check whether --enable-shared was given.
-if test ${enable_shared+y}
-then :
+if test "${enable_shared+set}" = set; then :
enableval=$enable_shared; p=${PACKAGE-default}
case $enableval in
yes) enable_shared=yes ;;
@@ -6606,7 +6215,7 @@ then :
IFS="$lt_save_ifs"
;;
esac
-else $as_nop
+else
enable_shared=yes
fi
@@ -6619,8 +6228,7 @@ fi
# Check whether --enable-static was given.
-if test ${enable_static+y}
-then :
+if test "${enable_static+set}" = set; then :
enableval=$enable_static; p=${PACKAGE-default}
case $enableval in
yes) enable_static=yes ;;
@@ -6638,7 +6246,7 @@ then :
IFS="$lt_save_ifs"
;;
esac
-else $as_nop
+else
enable_static=yes
fi
@@ -6652,10 +6260,9 @@ fi
# Check whether --with-pic was given.
-if test ${with_pic+y}
-then :
+if test "${with_pic+set}" = set; then :
withval=$with_pic; pic_mode="$withval"
-else $as_nop
+else
pic_mode=default
fi
@@ -6669,8 +6276,7 @@ test -z "$pic_mode" && pic_mode=default
# Check whether --enable-fast-install was given.
-if test ${enable_fast_install+y}
-then :
+if test "${enable_fast_install+set}" = set; then :
enableval=$enable_fast_install; p=${PACKAGE-default}
case $enableval in
yes) enable_fast_install=yes ;;
@@ -6688,7 +6294,7 @@ then :
IFS="$lt_save_ifs"
;;
esac
-else $as_nop
+else
enable_fast_install=yes
fi
@@ -6751,12 +6357,11 @@ if test -n "${ZSH_VERSION+set}" ; then
setopt NO_GLOB_SUBST
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
-printf %s "checking for objdir... " >&6; }
-if test ${lt_cv_objdir+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
rm -f .libs 2>/dev/null
mkdir .libs 2>/dev/null
if test -d .libs; then
@@ -6767,15 +6372,17 @@ else
fi
rmdir .libs 2>/dev/null
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
-printf "%s\n" "$lt_cv_objdir" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
objdir=$lt_cv_objdir
-printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
@@ -6858,12 +6465,11 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file
case $deplibs_check_method in
file_magic*)
if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
-printf %s "checking for ${ac_tool_prefix}file... " >&6; }
-if test ${lt_cv_path_MAGIC_CMD+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
case $MAGIC_CMD in
[\\/*] | ?:[\\/]*)
lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
@@ -6912,11 +6518,11 @@ fi
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if test -n "$MAGIC_CMD"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-printf "%s\n" "$MAGIC_CMD" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -6925,12 +6531,11 @@ fi
if test -z "$lt_cv_path_MAGIC_CMD"; then
if test -n "$ac_tool_prefix"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5
-printf %s "checking for file... " >&6; }
-if test ${lt_cv_path_MAGIC_CMD+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
case $MAGIC_CMD in
[\\/*] | ?:[\\/]*)
lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
@@ -6979,11 +6584,11 @@ fi
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if test -n "$MAGIC_CMD"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-printf "%s\n" "$MAGIC_CMD" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -7059,12 +6664,11 @@ lt_prog_compiler_no_builtin_flag=
if test "$GCC" = yes; then
lt_prog_compiler_no_builtin_flag=' -fno-builtin'
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test ${lt_cv_prog_compiler_rtti_exceptions+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
lt_cv_prog_compiler_rtti_exceptions=no
ac_outfile=conftest.$ac_objext
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
@@ -7078,11 +6682,11 @@ else $as_nop
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7081: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:6685: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7085: \$? = $ac_status" >&5
+ echo "$as_me:6689: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -7095,8 +6699,8 @@ else $as_nop
$RM conftest*
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
@@ -7115,8 +6719,8 @@ fi
lt_prog_compiler_pic=
lt_prog_compiler_static=
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-printf %s "checking for $compiler option to produce PIC... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
if test "$GCC" = yes; then
lt_prog_compiler_wl='-Wl,'
@@ -7387,8 +6991,8 @@ case $host_os in
lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
;;
esac
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
-printf "%s\n" "$lt_prog_compiler_pic" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
@@ -7399,12 +7003,11 @@ printf "%s\n" "$lt_prog_compiler_pic" >&6; }
# Check to make sure the PIC flag actually works.
#
if test -n "$lt_prog_compiler_pic"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test ${lt_cv_prog_compiler_pic_works+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
lt_cv_prog_compiler_pic_works=no
ac_outfile=conftest.$ac_objext
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
@@ -7418,11 +7021,11 @@ else $as_nop
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7421: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7024: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7425: \$? = $ac_status" >&5
+ echo "$as_me:7028: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -7435,8 +7038,8 @@ else $as_nop
$RM conftest*
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
-printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
case $lt_prog_compiler_pic in
@@ -7459,12 +7062,11 @@ fi
# Check to make sure the static flag actually works.
#
wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test ${lt_cv_prog_compiler_static_works+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
lt_cv_prog_compiler_static_works=no
save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
@@ -7488,8 +7090,8 @@ else $as_nop
LDFLAGS="$save_LDFLAGS"
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
-printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
if test x"$lt_cv_prog_compiler_static_works" = xyes; then
:
@@ -7503,12 +7105,11 @@ fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test ${lt_cv_prog_compiler_c_o+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
lt_cv_prog_compiler_c_o=no
$RM -r conftest 2>/dev/null
mkdir conftest
@@ -7525,11 +7126,11 @@ else $as_nop
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7528: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7129: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:7532: \$? = $ac_status" >&5
+ echo "$as_me:7133: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -7551,20 +7152,19 @@ else $as_nop
$RM conftest*
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test ${lt_cv_prog_compiler_c_o+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
lt_cv_prog_compiler_c_o=no
$RM -r conftest 2>/dev/null
mkdir conftest
@@ -7581,11 +7181,11 @@ else $as_nop
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7584: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7184: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:7588: \$? = $ac_status" >&5
+ echo "$as_me:7188: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -7607,8 +7207,8 @@ else $as_nop
$RM conftest*
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
@@ -7616,19 +7216,19 @@ printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
hard_links="nottested"
if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
# do not overwrite the value of need_locks provided by the user
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
-printf %s "checking if we can lock with hard links... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
hard_links=yes
$RM conftest*
ln conftest.a conftest.b 2>/dev/null && hard_links=no
touch conftest.a
ln conftest.a conftest.b 2>&5 || hard_links=no
ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
-printf "%s\n" "$hard_links" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
if test "$hard_links" = no; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-printf "%s\n" "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
need_locks=warn
fi
else
@@ -7640,8 +7240,8 @@ fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
runpath_var=
allow_undefined_flag=
@@ -8086,15 +7686,14 @@ _LT_EOF
/* end confdefs.h. */
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
lt_aix_libpath_sed='
/Import File Strings/,/^$/ {
@@ -8109,7 +7708,7 @@ if test -z "$aix_libpath"; then
aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
fi
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
@@ -8127,15 +7726,14 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
/* end confdefs.h. */
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
lt_aix_libpath_sed='
/Import File Strings/,/^$/ {
@@ -8150,7 +7748,7 @@ if test -z "$aix_libpath"; then
aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
fi
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
@@ -8367,12 +7965,11 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
/* end confdefs.h. */
int foo(void) {}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LDFLAGS="$save_LDFLAGS"
else
@@ -8629,8 +8226,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \
fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
-printf "%s\n" "$ld_shlibs" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
test "$ld_shlibs" = no && can_build_shared=no
with_gnu_ld=$with_gnu_ld
@@ -8666,15 +8263,15 @@ x|xyes)
# Test whether the compiler implicitly links with -lc since on some
# systems, -lgcc has to come before -lc. If gcc already passes -lc
# to ld, don't add -lc before -lgcc.
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-printf %s "checking whether -lc should be explicitly linked in... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
$RM conftest*
echo "$lt_simple_compile_test_code" > conftest.$ac_ext
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } 2>conftest.err; then
soname=conftest
lib=conftest
@@ -8692,7 +8289,7 @@ printf %s "checking whether -lc should be explicitly linked in... " >&6; }
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
(eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
then
archive_cmds_need_lc=no
@@ -8704,8 +8301,8 @@ printf %s "checking whether -lc should be explicitly linked in... " >&6; }
cat conftest.err 1>&5
fi
$RM conftest*
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
-printf "%s\n" "$archive_cmds_need_lc" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
+$as_echo "$archive_cmds_need_lc" >&6; }
;;
esac
fi
@@ -8868,8 +8465,8 @@ esac
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-printf %s "checking dynamic linker characteristics... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
if test "$GCC" = yes; then
case $host_os in
@@ -9307,21 +8904,19 @@ linux* | k*bsd*-gnu)
/* end confdefs.h. */
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
- if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null
-then :
+if ac_fn_c_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
shlibpath_overrides_runpath=yes
fi
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LDFLAGS=$save_LDFLAGS
libdir=$save_libdir
@@ -9534,8 +9129,8 @@ uts4*)
dynamic_linker=no
;;
esac
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-printf "%s\n" "$dynamic_linker" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
test "$dynamic_linker" = no && can_build_shared=no
variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
@@ -9636,8 +9231,8 @@ fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
-printf %s "checking how to hardcode library paths into programs... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
hardcode_action=
if test -n "$hardcode_libdir_flag_spec" ||
test -n "$runpath_var" ||
@@ -9661,8 +9256,8 @@ else
# directories.
hardcode_action=unsupported
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
-printf "%s\n" "$hardcode_action" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
if test "$hardcode_action" = relink ||
test "$inherit_rpath" = yes; then
@@ -9706,12 +9301,11 @@ else
darwin*)
# if libdl is installed we need to link against it
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-printf %s "checking for dlopen in -ldl... " >&6; }
-if test ${ac_cv_lib_dl_dlopen+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -9720,31 +9314,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char dlopen ();
int
-main (void)
+main ()
{
return dlopen ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_dl_dlopen=yes
-else $as_nop
+else
ac_cv_lib_dl_dlopen=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes
-then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else $as_nop
+else
lt_cv_dlopen="dyld"
lt_cv_dlopen_libs=
@@ -9756,16 +9351,14 @@ fi
*)
ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = xyes
-then :
+if test "x$ac_cv_func_shl_load" = xyes; then :
lt_cv_dlopen="shl_load"
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
-printf %s "checking for shl_load in -ldld... " >&6; }
-if test ${ac_cv_lib_dld_shl_load+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldld $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -9774,42 +9367,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char shl_load ();
int
-main (void)
+main ()
{
return shl_load ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_dld_shl_load=yes
-else $as_nop
+else
ac_cv_lib_dld_shl_load=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
-printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = xyes
-then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else $as_nop
+else
ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = xyes
-then :
+if test "x$ac_cv_func_dlopen" = xyes; then :
lt_cv_dlopen="dlopen"
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-printf %s "checking for dlopen in -ldl... " >&6; }
-if test ${ac_cv_lib_dl_dlopen+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldl $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -9818,37 +9410,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char dlopen ();
int
-main (void)
+main ()
{
return dlopen ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_dl_dlopen=yes
-else $as_nop
+else
ac_cv_lib_dl_dlopen=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes
-then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
-printf %s "checking for dlopen in -lsvld... " >&6; }
-if test ${ac_cv_lib_svld_dlopen+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsvld $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -9857,37 +9449,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char dlopen ();
int
-main (void)
+main ()
{
return dlopen ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_svld_dlopen=yes
-else $as_nop
+else
ac_cv_lib_svld_dlopen=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
-printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = xyes
-then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
-printf %s "checking for dld_link in -ldld... " >&6; }
-if test ${ac_cv_lib_dld_dld_link+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_check_lib_save_LIBS=$LIBS
LIBS="-ldld $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -9896,29 +9488,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char dld_link ();
int
-main (void)
+main ()
{
return dld_link ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_dld_dld_link=yes
-else $as_nop
+else
ac_cv_lib_dld_dld_link=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
-printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = xyes
-then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
fi
@@ -9957,19 +9550,18 @@ fi
save_LIBS="$LIBS"
LIBS="$lt_cv_dlopen_libs $LIBS"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
-printf %s "checking whether a program can dlopen itself... " >&6; }
-if test ${lt_cv_dlopen_self+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test "$cross_compiling" = yes; then :
lt_cv_dlopen_self=cross
else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 9972 "configure"
+#line 9564 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10031,7 +9623,7 @@ _LT_EOF
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
(eval $ac_link) 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
(./conftest; exit; ) >&5 2>/dev/null
lt_status=$?
@@ -10049,24 +9641,23 @@ rm -fr conftest*
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
-printf "%s\n" "$lt_cv_dlopen_self" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
if test "x$lt_cv_dlopen_self" = xyes; then
wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
-printf %s "checking whether a statically linked program can dlopen itself... " >&6; }
-if test ${lt_cv_dlopen_self_static+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test "$cross_compiling" = yes; then :
lt_cv_dlopen_self_static=cross
else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10069 "configure"
+#line 9660 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10128,7 +9719,7 @@ _LT_EOF
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
(eval $ac_link) 2>&5
ac_status=$?
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
(./conftest; exit; ) >&5 2>/dev/null
lt_status=$?
@@ -10146,8 +9737,8 @@ rm -fr conftest*
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
-printf "%s\n" "$lt_cv_dlopen_self_static" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
fi
CPPFLAGS="$save_CPPFLAGS"
@@ -10185,13 +9776,13 @@ fi
striplib=
old_striplib=
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
-printf %s "checking whether stripping libraries is possible... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
# FIXME - insert some real tests, host_os isn't really good enough
case $host_os in
@@ -10199,16 +9790,16 @@ else
if test -n "$STRIP" ; then
striplib="$STRIP -x"
old_striplib="$STRIP -S"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
;;
*)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
;;
esac
fi
@@ -10225,13 +9816,13 @@ fi
# Report which library types will actually be built
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
-printf %s "checking if libtool supports shared libraries... " >&6; }
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
-printf "%s\n" "$can_build_shared" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
-printf %s "checking whether to build shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
test "$can_build_shared" = "no" && enable_shared=no
# On AIX, shared libraries and static libraries use the same namespace, and
@@ -10251,15 +9842,15 @@ printf %s "checking whether to build shared libraries... " >&6; }
fi
;;
esac
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
-printf "%s\n" "$enable_shared" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
-printf %s "checking whether to build static libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
# Make sure either enable_shared or enable_static is yes.
test "$enable_shared" = yes || enable_static=yes
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
-printf "%s\n" "$enable_static" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
@@ -10293,8 +9884,7 @@ CC="$lt_save_CC"
# Only expand once:
-
- # Find a good install program. We prefer a C program (faster),
+# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
# SysV /etc/install, /usr/sbin/install
@@ -10308,25 +9898,20 @@ CC="$lt_save_CC"
# OS/2's system install, which has a completely different semantic
# ./install, which can be erroneously created by make from ./install.sh.
# Reject install programs that cannot install multiple files.
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-printf %s "checking for a BSD-compatible install... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
if test -z "$INSTALL"; then
-if test ${ac_cv_path_install+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- # Account for fact that we put trailing slashes in our PATH walk.
-case $as_dir in #((
- ./ | /[cC]/* | \
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
/etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
/usr/ucb/* ) ;;
@@ -10336,13 +9921,13 @@ case $as_dir in #((
# by default.
for ac_prog in ginstall scoinst install; do
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
if test $ac_prog = install &&
- grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
:
elif test $ac_prog = install &&
- grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# program-specific install script used by HP pwplus--don't use.
:
else
@@ -10350,12 +9935,12 @@ case $as_dir in #((
echo one > conftest.one
echo two > conftest.two
mkdir conftest.dir
- if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
test -s conftest.one && test -s conftest.two &&
test -s conftest.dir/conftest.one &&
test -s conftest.dir/conftest.two
then
- ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
break 3
fi
fi
@@ -10371,7 +9956,7 @@ IFS=$as_save_IFS
rm -rf conftest.one conftest.two conftest.dir
fi
- if test ${ac_cv_path_install+y}; then
+ if test "${ac_cv_path_install+set}" = set; then
INSTALL=$ac_cv_path_install
else
# As a last resort, use the slow shell script. Don't cache a
@@ -10381,8 +9966,8 @@ fi
INSTALL=$ac_install_sh
fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-printf "%s\n" "$INSTALL" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
@@ -10397,19 +9982,17 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
# Enable large file support (if special flags are necessary)
#
# Check whether --enable-largefile was given.
-if test ${enable_largefile+y}
-then :
+if test "${enable_largefile+set}" = set; then :
enableval=$enable_largefile;
fi
if test "$enable_largefile" != no; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
-printf %s "checking for special C compiler options needed for large files... " >&6; }
-if test ${ac_cv_sys_largefile_CC+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if ${ac_cv_sys_largefile_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_cv_sys_largefile_CC=no
if test "$GCC" != yes; then
ac_save_CC=$CC
@@ -10423,47 +10006,44 @@ else $as_nop
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
- if ac_fn_c_try_compile "$LINENO"
-then :
+ if ac_fn_c_try_compile "$LINENO"; then :
break
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam
+rm -f core conftest.err conftest.$ac_objext
CC="$CC -n32"
- if ac_fn_c_try_compile "$LINENO"
-then :
+ if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_sys_largefile_CC=' -n32'; break
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam
+rm -f core conftest.err conftest.$ac_objext
break
done
CC=$ac_save_CC
rm -f conftest.$ac_ext
fi
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
-printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
if test "$ac_cv_sys_largefile_CC" != no; then
CC=$CC$ac_cv_sys_largefile_CC
fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if test ${ac_cv_sys_file_offset_bits+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if ${ac_cv_sys_file_offset_bits+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10472,23 +10052,22 @@ else $as_nop
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_sys_file_offset_bits=no; break
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#define _FILE_OFFSET_BITS 64
@@ -10497,43 +10076,43 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_sys_file_offset_bits=64; break
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_sys_file_offset_bits=unknown
break
done
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
-printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
case $ac_cv_sys_file_offset_bits in #(
no | unknown) ;;
*)
-printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
;;
esac
rm -rf conftest*
if test $ac_cv_sys_file_offset_bits = unknown; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
-printf %s "checking for _LARGE_FILES value needed for large files... " >&6; }
-if test ${ac_cv_sys_large_files+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if ${ac_cv_sys_large_files+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
while :; do
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10542,23 +10121,22 @@ else $as_nop
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_sys_large_files=no; break
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#define _LARGE_FILES 1
@@ -10567,119 +10145,132 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
int
-main (void)
+main ()
{
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
+if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_sys_large_files=1; break
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_sys_large_files=unknown
break
done
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
-printf "%s\n" "$ac_cv_sys_large_files" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
case $ac_cv_sys_large_files in #(
no | unknown) ;;
*)
-printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
;;
esac
rm -rf conftest*
fi
+
+
fi
#########
# Check for needed/wanted data types
ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default"
-if test "x$ac_cv_type_int8_t" = xyes
-then :
+if test "x$ac_cv_type_int8_t" = xyes; then :
-printf "%s\n" "#define HAVE_INT8_T 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INT8_T 1
+_ACEOF
fi
ac_fn_c_check_type "$LINENO" "int16_t" "ac_cv_type_int16_t" "$ac_includes_default"
-if test "x$ac_cv_type_int16_t" = xyes
-then :
+if test "x$ac_cv_type_int16_t" = xyes; then :
-printf "%s\n" "#define HAVE_INT16_T 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INT16_T 1
+_ACEOF
fi
ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default"
-if test "x$ac_cv_type_int32_t" = xyes
-then :
+if test "x$ac_cv_type_int32_t" = xyes; then :
-printf "%s\n" "#define HAVE_INT32_T 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INT32_T 1
+_ACEOF
fi
ac_fn_c_check_type "$LINENO" "int64_t" "ac_cv_type_int64_t" "$ac_includes_default"
-if test "x$ac_cv_type_int64_t" = xyes
-then :
+if test "x$ac_cv_type_int64_t" = xyes; then :
-printf "%s\n" "#define HAVE_INT64_T 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INT64_T 1
+_ACEOF
fi
ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default"
-if test "x$ac_cv_type_intptr_t" = xyes
-then :
+if test "x$ac_cv_type_intptr_t" = xyes; then :
-printf "%s\n" "#define HAVE_INTPTR_T 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INTPTR_T 1
+_ACEOF
fi
ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default"
-if test "x$ac_cv_type_uint8_t" = xyes
-then :
+if test "x$ac_cv_type_uint8_t" = xyes; then :
-printf "%s\n" "#define HAVE_UINT8_T 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINT8_T 1
+_ACEOF
fi
ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default"
-if test "x$ac_cv_type_uint16_t" = xyes
-then :
+if test "x$ac_cv_type_uint16_t" = xyes; then :
-printf "%s\n" "#define HAVE_UINT16_T 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINT16_T 1
+_ACEOF
fi
ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default"
-if test "x$ac_cv_type_uint32_t" = xyes
-then :
+if test "x$ac_cv_type_uint32_t" = xyes; then :
-printf "%s\n" "#define HAVE_UINT32_T 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINT32_T 1
+_ACEOF
fi
ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "$ac_includes_default"
-if test "x$ac_cv_type_uint64_t" = xyes
-then :
+if test "x$ac_cv_type_uint64_t" = xyes; then :
-printf "%s\n" "#define HAVE_UINT64_T 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINT64_T 1
+_ACEOF
fi
ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default"
-if test "x$ac_cv_type_uintptr_t" = xyes
-then :
+if test "x$ac_cv_type_uintptr_t" = xyes; then :
-printf "%s\n" "#define HAVE_UINTPTR_T 1" >>confdefs.h
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINTPTR_T 1
+_ACEOF
fi
@@ -10687,119 +10278,34 @@ fi
#########
# Check for needed/wanted headers
-ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_types_h" = xyes
-then :
- printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
-
-fi
-ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = xyes
-then :
- printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h
-
-fi
-ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdint_h" = xyes
-then :
- printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h
-
-fi
-ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
-if test "x$ac_cv_header_inttypes_h" = xyes
-then :
- printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h
+for ac_header in sys/types.h stdlib.h stdint.h inttypes.h malloc.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
fi
-ac_fn_c_check_header_compile "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default"
-if test "x$ac_cv_header_malloc_h" = xyes
-then :
- printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h
-fi
+done
#########
# Figure out whether or not we have these functions
#
-ac_fn_c_check_func "$LINENO" "fdatasync" "ac_cv_func_fdatasync"
-if test "x$ac_cv_func_fdatasync" = xyes
-then :
- printf "%s\n" "#define HAVE_FDATASYNC 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r"
-if test "x$ac_cv_func_gmtime_r" = xyes
-then :
- printf "%s\n" "#define HAVE_GMTIME_R 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "isnan" "ac_cv_func_isnan"
-if test "x$ac_cv_func_isnan" = xyes
-then :
- printf "%s\n" "#define HAVE_ISNAN 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r"
-if test "x$ac_cv_func_localtime_r" = xyes
-then :
- printf "%s\n" "#define HAVE_LOCALTIME_R 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "localtime_s" "ac_cv_func_localtime_s"
-if test "x$ac_cv_func_localtime_s" = xyes
-then :
- printf "%s\n" "#define HAVE_LOCALTIME_S 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "malloc_usable_size" "ac_cv_func_malloc_usable_size"
-if test "x$ac_cv_func_malloc_usable_size" = xyes
-then :
- printf "%s\n" "#define HAVE_MALLOC_USABLE_SIZE 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul"
-if test "x$ac_cv_func_strchrnul" = xyes
-then :
- printf "%s\n" "#define HAVE_STRCHRNUL 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep"
-if test "x$ac_cv_func_usleep" = xyes
-then :
- printf "%s\n" "#define HAVE_USLEEP 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "utime" "ac_cv_func_utime"
-if test "x$ac_cv_func_utime" = xyes
-then :
- printf "%s\n" "#define HAVE_UTIME 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread"
-if test "x$ac_cv_func_pread" = xyes
-then :
- printf "%s\n" "#define HAVE_PREAD 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "pread64" "ac_cv_func_pread64"
-if test "x$ac_cv_func_pread64" = xyes
-then :
- printf "%s\n" "#define HAVE_PREAD64 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "pwrite" "ac_cv_func_pwrite"
-if test "x$ac_cv_func_pwrite" = xyes
-then :
- printf "%s\n" "#define HAVE_PWRITE 1" >>confdefs.h
-
-fi
-ac_fn_c_check_func "$LINENO" "pwrite64" "ac_cv_func_pwrite64"
-if test "x$ac_cv_func_pwrite64" = xyes
-then :
- printf "%s\n" "#define HAVE_PWRITE64 1" >>confdefs.h
+for ac_func in fdatasync gmtime_r isnan localtime_r localtime_s malloc_usable_size strchrnul usleep utime pread pread64 pwrite pwrite64
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
fi
+done
#########
@@ -10816,12 +10322,11 @@ for ac_prog in tclsh8.7 tclsh8.6 tclsh8.5 tclsh
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_TCLSH_CMD+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_TCLSH_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$TCLSH_CMD"; then
ac_cv_prog_TCLSH_CMD="$TCLSH_CMD" # Let the user override the test.
else
@@ -10829,15 +10334,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_TCLSH_CMD="$ac_prog"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -10848,11 +10349,11 @@ fi
fi
TCLSH_CMD=$ac_cv_prog_TCLSH_CMD
if test -n "$TCLSH_CMD"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $TCLSH_CMD" >&5
-printf "%s\n" "$TCLSH_CMD" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TCLSH_CMD" >&5
+$as_echo "$TCLSH_CMD" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -10891,12 +10392,12 @@ fi
VERSION=`cat $srcdir/VERSION | sed 's/^\([0-9]*\.*[0-9]*\).*/\1/'`
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Version set to $VERSION" >&5
-printf "%s\n" "$as_me: Version set to $VERSION" >&6;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: Version set to $VERSION" >&5
+$as_echo "$as_me: Version set to $VERSION" >&6;}
RELEASE=`cat $srcdir/VERSION`
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Release set to $RELEASE" >&5
-printf "%s\n" "$as_me: Release set to $RELEASE" >&6;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: Release set to $RELEASE" >&5
+$as_echo "$as_me: Release set to $RELEASE" >&6;}
##########
@@ -10906,25 +10407,23 @@ printf "%s\n" "$as_me: Release set to $RELEASE" >&6;}
#
# Check whether --with-wasi-sdk was given.
-if test ${with_wasi_sdk+y}
-then :
+if test "${with_wasi_sdk+set}" = set; then :
withval=$with_wasi_sdk; with_wasisdk=${withval}
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for WASI SDK directory" >&5
-printf %s "checking for WASI SDK directory... " >&6; }
-if test ${ac_cv_c_wasi_sdk+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for WASI SDK directory" >&5
+$as_echo_n "checking for WASI SDK directory... " >&6; }
+if ${ac_cv_c_wasi_sdk+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
# First check to see if --with-tcl was specified.
if test x"${with_wasi_sdk}" != x ; then
if ! test -d "${with_wasi_sdk}" ; then
as_fn_error $? "${with_wasi_sdk} directory doesn't exist" "$LINENO" 5
fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${with_wasi_sdk}: using wasi-sdk clang, disabling: tcl, CLI shell, DLL" >&5
-printf "%s\n" "${with_wasi_sdk}: using wasi-sdk clang, disabling: tcl, CLI shell, DLL" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_wasi_sdk}: using wasi-sdk clang, disabling: tcl, CLI shell, DLL" >&5
+$as_echo "${with_wasi_sdk}: using wasi-sdk clang, disabling: tcl, CLI shell, DLL" >&6; }
use_wasi_sdk=yes
else
use_wasi_sdk=no
@@ -10934,8 +10433,8 @@ fi
if test "${use_wasi_sdk}" = "no" ; then
HAVE_WASI_SDK=""
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
else
HAVE_WASI_SDK=1
# Changing --host and --target have no effect here except to possibly
@@ -10957,8 +10456,8 @@ else
# libtool is apparently hard-coded to use gcc for linking DLLs, so
# we disable the DLL build...
enable_shared=no
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
fi
@@ -10976,12 +10475,11 @@ else
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_BUILD_CC+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_BUILD_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
if test -n "$BUILD_CC"; then
ac_cv_prog_BUILD_CC="$BUILD_CC" # Let the user override the test.
else
@@ -10989,15 +10487,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
+ test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_BUILD_CC="$ac_prog"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
@@ -11008,11 +10502,11 @@ fi
fi
BUILD_CC=$ac_cv_prog_BUILD_CC
if test -n "$BUILD_CC"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $BUILD_CC" >&5
-printf "%s\n" "$BUILD_CC" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CC" >&5
+$as_echo "$BUILD_CC" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
@@ -11030,31 +10524,29 @@ fi
# Do we want to support multithreaded use of sqlite
#
# Check whether --enable-threadsafe was given.
-if test ${enable_threadsafe+y}
-then :
+if test "${enable_threadsafe+set}" = set; then :
enableval=$enable_threadsafe;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support threadsafe operation" >&5
-printf %s "checking whether to support threadsafe operation... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support threadsafe operation" >&5
+$as_echo_n "checking whether to support threadsafe operation... " >&6; }
if test "$enable_threadsafe" = "no"; then
SQLITE_THREADSAFE=0
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
else
SQLITE_THREADSAFE=1
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
fi
if test "$SQLITE_THREADSAFE" = "1"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_create" >&5
-printf %s "checking for library containing pthread_create... " >&6; }
-if test ${ac_cv_search_pthread_create+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_create" >&5
+$as_echo_n "checking for library containing pthread_create... " >&6; }
+if ${ac_cv_search_pthread_create+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -11062,58 +10554,55 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char pthread_create ();
int
-main (void)
+main ()
{
return pthread_create ();
;
return 0;
}
_ACEOF
-for ac_lib in '' pthread
-do
+for ac_lib in '' pthread; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"
-then :
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_pthread_create=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test ${ac_cv_search_pthread_create+y}
-then :
+ if ${ac_cv_search_pthread_create+:} false; then :
break
fi
done
-if test ${ac_cv_search_pthread_create+y}
-then :
+if ${ac_cv_search_pthread_create+:} false; then :
-else $as_nop
+else
ac_cv_search_pthread_create=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_create" >&5
-printf "%s\n" "$ac_cv_search_pthread_create" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_create" >&5
+$as_echo "$ac_cv_search_pthread_create" >&6; }
ac_res=$ac_cv_search_pthread_create
-if test "$ac_res" != no
-then :
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_mutexattr_init" >&5
-printf %s "checking for library containing pthread_mutexattr_init... " >&6; }
-if test ${ac_cv_search_pthread_mutexattr_init+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_mutexattr_init" >&5
+$as_echo_n "checking for library containing pthread_mutexattr_init... " >&6; }
+if ${ac_cv_search_pthread_mutexattr_init+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -11121,48 +10610,46 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char pthread_mutexattr_init ();
int
-main (void)
+main ()
{
return pthread_mutexattr_init ();
;
return 0;
}
_ACEOF
-for ac_lib in '' pthread
-do
+for ac_lib in '' pthread; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"
-then :
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_pthread_mutexattr_init=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test ${ac_cv_search_pthread_mutexattr_init+y}
-then :
+ if ${ac_cv_search_pthread_mutexattr_init+:} false; then :
break
fi
done
-if test ${ac_cv_search_pthread_mutexattr_init+y}
-then :
+if ${ac_cv_search_pthread_mutexattr_init+:} false; then :
-else $as_nop
+else
ac_cv_search_pthread_mutexattr_init=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_mutexattr_init" >&5
-printf "%s\n" "$ac_cv_search_pthread_mutexattr_init" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_mutexattr_init" >&5
+$as_echo "$ac_cv_search_pthread_mutexattr_init" >&6; }
ac_res=$ac_cv_search_pthread_mutexattr_init
-if test "$ac_res" != no
-then :
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
@@ -11173,23 +10660,22 @@ fi
# Do we want to support release
#
# Check whether --enable-releasemode was given.
-if test ${enable_releasemode+y}
-then :
+if test "${enable_releasemode+set}" = set; then :
enableval=$enable_releasemode;
-else $as_nop
+else
enable_releasemode=no
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support shared library linked as release mode or not" >&5
-printf %s "checking whether to support shared library linked as release mode or not... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support shared library linked as release mode or not" >&5
+$as_echo_n "checking whether to support shared library linked as release mode or not... " >&6; }
if test "$enable_releasemode" = "no"; then
ALLOWRELEASE=""
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
else
ALLOWRELEASE="-release `cat $srcdir/VERSION`"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
fi
@@ -11197,40 +10683,39 @@ fi
# Do we want temporary databases in memory
#
# Check whether --enable-tempstore was given.
-if test ${enable_tempstore+y}
-then :
+if test "${enable_tempstore+set}" = set; then :
enableval=$enable_tempstore;
-else $as_nop
+else
enable_tempstore=no
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use an in-ram database for temporary tables" >&5
-printf %s "checking whether to use an in-ram database for temporary tables... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use an in-ram database for temporary tables" >&5
+$as_echo_n "checking whether to use an in-ram database for temporary tables... " >&6; }
case "$enable_tempstore" in
never )
TEMP_STORE=0
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: never" >&5
-printf "%s\n" "never" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: never" >&5
+$as_echo "never" >&6; }
;;
no )
TEMP_STORE=1
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
;;
yes )
TEMP_STORE=2
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
;;
always )
TEMP_STORE=3
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: always" >&5
-printf "%s\n" "always" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: always" >&5
+$as_echo "always" >&6; }
;;
* )
TEMP_STORE=1
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
;;
esac
@@ -11241,15 +10726,15 @@ esac
# the CYGWIN environment. So check for that special case and handle
# things accordingly.
#
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if executables have the .exe suffix" >&5
-printf %s "checking if executables have the .exe suffix... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if executables have the .exe suffix" >&5
+$as_echo_n "checking if executables have the .exe suffix... " >&6; }
if test "$config_BUILD_EXEEXT" = ".exe"; then
CYGWIN=yes
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
-printf "%s\n" "unknown" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
+$as_echo "unknown" >&6; }
fi
if test "$CYGWIN" != "yes"; then
@@ -11293,27 +10778,24 @@ fi
# minor changes to accomodate systems that do not have TCL installed.
#
# Check whether --enable-tcl was given.
-if test ${enable_tcl+y}
-then :
+if test "${enable_tcl+set}" = set; then :
enableval=$enable_tcl; use_tcl=$enableval
-else $as_nop
+else
use_tcl=yes
fi
if test "${use_tcl}" = "yes" ; then
# Check whether --with-tcl was given.
-if test ${with_tcl+y}
-then :
+if test "${with_tcl+set}" = set; then :
withval=$with_tcl; with_tclconfig=${withval}
fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Tcl configuration" >&5
-printf %s "checking for Tcl configuration... " >&6; }
- if test ${ac_cv_c_tclconfig+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl configuration" >&5
+$as_echo_n "checking for Tcl configuration... " >&6; }
+ if ${ac_cv_c_tclconfig+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
# First check to see if --with-tcl was specified.
if test x"${with_tclconfig}" != x ; then
@@ -11423,26 +10905,26 @@ fi
if test x"${ac_cv_c_tclconfig}" = x ; then
use_tcl=no
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Can't find Tcl configuration definitions" >&5
-printf "%s\n" "$as_me: WARNING: Can't find Tcl configuration definitions" >&2;}
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: *** Without Tcl the regression tests cannot be executed ***" >&5
-printf "%s\n" "$as_me: WARNING: *** Without Tcl the regression tests cannot be executed ***" >&2;}
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: *** Consider using --with-tcl=... to define location of Tcl ***" >&5
-printf "%s\n" "$as_me: WARNING: *** Consider using --with-tcl=... to define location of Tcl ***" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't find Tcl configuration definitions" >&5
+$as_echo "$as_me: WARNING: Can't find Tcl configuration definitions" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Without Tcl the regression tests cannot be executed ***" >&5
+$as_echo "$as_me: WARNING: *** Without Tcl the regression tests cannot be executed ***" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Consider using --with-tcl=... to define location of Tcl ***" >&5
+$as_echo "$as_me: WARNING: *** Consider using --with-tcl=... to define location of Tcl ***" >&2;}
else
TCL_BIN_DIR=${ac_cv_c_tclconfig}
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found $TCL_BIN_DIR/tclConfig.sh" >&5
-printf "%s\n" "found $TCL_BIN_DIR/tclConfig.sh" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $TCL_BIN_DIR/tclConfig.sh" >&5
+$as_echo "found $TCL_BIN_DIR/tclConfig.sh" >&6; }
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for existence of $TCL_BIN_DIR/tclConfig.sh" >&5
-printf %s "checking for existence of $TCL_BIN_DIR/tclConfig.sh... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of $TCL_BIN_DIR/tclConfig.sh" >&5
+$as_echo_n "checking for existence of $TCL_BIN_DIR/tclConfig.sh... " >&6; }
if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: loading" >&5
-printf "%s\n" "loading" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5
+$as_echo "loading" >&6; }
. $TCL_BIN_DIR/tclConfig.sh
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: file not found" >&5
-printf "%s\n" "file not found" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: file not found" >&5
+$as_echo "file not found" >&6; }
fi
#
@@ -11503,18 +10985,16 @@ TARGET_READLINE_INC=""
TARGET_HAVE_READLINE=0
TARGET_HAVE_EDITLINE=0
# Check whether --enable-editline was given.
-if test ${enable_editline+y}
-then :
+if test "${enable_editline+set}" = set; then :
enableval=$enable_editline; with_editline=$enableval
-else $as_nop
+else
with_editline=auto
fi
# Check whether --enable-readline was given.
-if test ${enable_readline+y}
-then :
+if test "${enable_readline+set}" = set; then :
enableval=$enable_readline; with_readline=$enableval
-else $as_nop
+else
with_readline=auto
fi
@@ -11523,12 +11003,11 @@ if test x"$with_editline" != xno; then
sLIBS=$LIBS
LIBS=""
TARGET_HAVE_EDITLINE=1
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing readline" >&5
-printf %s "checking for library containing readline... " >&6; }
-if test ${ac_cv_search_readline+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing readline" >&5
+$as_echo_n "checking for library containing readline... " >&6; }
+if ${ac_cv_search_readline+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -11536,51 +11015,49 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char readline ();
int
-main (void)
+main ()
{
return readline ();
;
return 0;
}
_ACEOF
-for ac_lib in '' edit
-do
+for ac_lib in '' edit; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"
-then :
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_readline=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test ${ac_cv_search_readline+y}
-then :
+ if ${ac_cv_search_readline+:} false; then :
break
fi
done
-if test ${ac_cv_search_readline+y}
-then :
+if ${ac_cv_search_readline+:} false; then :
-else $as_nop
+else
ac_cv_search_readline=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_readline" >&5
-printf "%s\n" "$ac_cv_search_readline" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_readline" >&5
+$as_echo "$ac_cv_search_readline" >&6; }
ac_res=$ac_cv_search_readline
-if test "$ac_res" != no
-then :
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
with_readline=no
-else $as_nop
+else
TARGET_HAVE_EDITLINE=0
fi
@@ -11592,22 +11069,20 @@ if test x"$with_readline" != xno; then
# Check whether --with-readline-lib was given.
-if test ${with_readline_lib+y}
-then :
+if test "${with_readline_lib+set}" = set; then :
withval=$with_readline_lib; with_readline_lib=$withval
-else $as_nop
+else
with_readline_lib="auto"
fi
if test "x$with_readline_lib" = xauto; then
save_LIBS="$LIBS"
LIBS=""
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5
-printf %s "checking for library containing tgetent... " >&6; }
-if test ${ac_cv_search_tgetent+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5
+$as_echo_n "checking for library containing tgetent... " >&6; }
+if ${ac_cv_search_tgetent+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -11615,60 +11090,57 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char tgetent ();
int
-main (void)
+main ()
{
return tgetent ();
;
return 0;
}
_ACEOF
-for ac_lib in '' readline ncurses curses termcap
-do
+for ac_lib in '' readline ncurses curses termcap; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"
-then :
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_tgetent=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test ${ac_cv_search_tgetent+y}
-then :
+ if ${ac_cv_search_tgetent+:} false; then :
break
fi
done
-if test ${ac_cv_search_tgetent+y}
-then :
+if ${ac_cv_search_tgetent+:} false; then :
-else $as_nop
+else
ac_cv_search_tgetent=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_tgetent" >&5
-printf "%s\n" "$ac_cv_search_tgetent" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_tgetent" >&5
+$as_echo "$ac_cv_search_tgetent" >&6; }
ac_res=$ac_cv_search_tgetent
-if test "$ac_res" != no
-then :
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
term_LIBS="$LIBS"
-else $as_nop
+else
term_LIBS=""
fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5
-printf %s "checking for readline in -lreadline... " >&6; }
-if test ${ac_cv_lib_readline_readline+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5
+$as_echo_n "checking for readline in -lreadline... " >&6; }
+if ${ac_cv_lib_readline_readline+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lreadline $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -11677,31 +11149,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char readline ();
int
-main (void)
+main ()
{
return readline ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
+if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_readline_readline=yes
-else $as_nop
+else
ac_cv_lib_readline_readline=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5
-printf "%s\n" "$ac_cv_lib_readline_readline" >&6; }
-if test "x$ac_cv_lib_readline_readline" = xyes
-then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5
+$as_echo "$ac_cv_lib_readline_readline" >&6; }
+if test "x$ac_cv_lib_readline_readline" = xyes; then :
TARGET_READLINE_LIBS="-lreadline"
-else $as_nop
+else
found="no"
fi
@@ -11713,31 +11186,28 @@ fi
# Check whether --with-readline-inc was given.
-if test ${with_readline_inc+y}
-then :
+if test "${with_readline_inc+set}" = set; then :
withval=$with_readline_inc; with_readline_inc=$withval
-else $as_nop
+else
with_readline_inc="auto"
fi
if test "x$with_readline_inc" = xauto; then
- ac_fn_c_check_header_compile "$LINENO" "readline.h" "ac_cv_header_readline_h" "$ac_includes_default"
-if test "x$ac_cv_header_readline_h" = xyes
-then :
+ ac_fn_c_check_header_mongrel "$LINENO" "readline.h" "ac_cv_header_readline_h" "$ac_includes_default"
+if test "x$ac_cv_header_readline_h" = xyes; then :
found="yes"
-else $as_nop
+else
found="no"
if test "$cross_compiling" != yes; then
for dir in /usr /usr/local /usr/local/readline /usr/contrib /mingw; do
for subdir in include include/readline; do
- as_ac_File=`printf "%s\n" "ac_cv_file_$dir/$subdir/readline.h" | $as_tr_sh`
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $dir/$subdir/readline.h" >&5
-printf %s "checking for $dir/$subdir/readline.h... " >&6; }
-if eval test \${$as_ac_File+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ as_ac_File=`$as_echo "ac_cv_file_$dir/$subdir/readline.h" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/$subdir/readline.h" >&5
+$as_echo_n "checking for $dir/$subdir/readline.h... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "$dir/$subdir/readline.h"; then
@@ -11747,10 +11217,9 @@ else
fi
fi
eval ac_res=\$$as_ac_File
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-printf "%s\n" "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_File"\" = x"yes"
-then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
found=yes
fi
@@ -11765,14 +11234,12 @@ fi
fi
+
else
TARGET_READLINE_INC="$with_readline_inc"
fi
if test x"$found" = xno; then
- if test x"$enable_readline" = xyes; then
- as_fn_error $? "\"No suitable readline library found\"" "$LINENO" 5
- fi
TARGET_READLINE_LIBS=""
TARGET_READLINE_INC=""
TARGET_HAVE_READLINE=0
@@ -11782,10 +11249,9 @@ fi
fi
# Check whether --with-linenoise was given.
-if test ${with_linenoise+y}
-then :
+if test "${with_linenoise+set}" = set; then :
withval=$with_linenoise; with_linenoise=$withval
-else $as_nop
+else
with_linenoise="no"
fi
@@ -11812,12 +11278,11 @@ fi
# Figure out what C libraries are required to compile programs
# that use "fdatasync()" function.
#
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing fdatasync" >&5
-printf %s "checking for library containing fdatasync... " >&6; }
-if test ${ac_cv_search_fdatasync+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing fdatasync" >&5
+$as_echo_n "checking for library containing fdatasync... " >&6; }
+if ${ac_cv_search_fdatasync+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -11825,48 +11290,46 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char fdatasync ();
int
-main (void)
+main ()
{
return fdatasync ();
;
return 0;
}
_ACEOF
-for ac_lib in '' rt
-do
+for ac_lib in '' rt; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"
-then :
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_fdatasync=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test ${ac_cv_search_fdatasync+y}
-then :
+ if ${ac_cv_search_fdatasync+:} false; then :
break
fi
done
-if test ${ac_cv_search_fdatasync+y}
-then :
+if ${ac_cv_search_fdatasync+:} false; then :
-else $as_nop
+else
ac_cv_search_fdatasync=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_fdatasync" >&5
-printf "%s\n" "$ac_cv_search_fdatasync" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_fdatasync" >&5
+$as_echo "$ac_cv_search_fdatasync" >&6; }
ac_res=$ac_cv_search_fdatasync
-if test "$ac_res" != no
-then :
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
@@ -11875,21 +11338,20 @@ fi
#########
# check for debug enabled
# Check whether --enable-debug was given.
-if test ${enable_debug+y}
-then :
+if test "${enable_debug+set}" = set; then :
enableval=$enable_debug;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build type" >&5
-printf %s "checking build type... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build type" >&5
+$as_echo_n "checking build type... " >&6; }
if test "${enable_debug}" = "yes" ; then
TARGET_DEBUG="-DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -O0 -Wall"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: debug" >&5
-printf "%s\n" "debug" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: debug" >&5
+$as_echo "debug" >&6; }
else
TARGET_DEBUG="-DNDEBUG"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: release" >&5
-printf "%s\n" "release" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: release" >&5
+$as_echo "release" >&6; }
fi
@@ -11897,8 +11359,7 @@ fi
# See whether we should use the amalgamation to build
# Check whether --enable-amalgamation was given.
-if test ${enable_amalgamation+y}
-then :
+if test "${enable_amalgamation+set}" = set; then :
enableval=$enable_amalgamation;
fi
@@ -11909,19 +11370,23 @@ fi
#########
# Look for zlib. Only needed by extensions and by the sqlite3.exe shell
-ac_fn_c_check_header_compile "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_zlib_h" = xyes
-then :
- printf "%s\n" "#define HAVE_ZLIB_H 1" >>confdefs.h
+for ac_header in zlib.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_ZLIB_H 1
+_ACEOF
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing deflate" >&5
-printf %s "checking for library containing deflate... " >&6; }
-if test ${ac_cv_search_deflate+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing deflate" >&5
+$as_echo_n "checking for library containing deflate... " >&6; }
+if ${ac_cv_search_deflate+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -11929,51 +11394,49 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char deflate ();
int
-main (void)
+main ()
{
return deflate ();
;
return 0;
}
_ACEOF
-for ac_lib in '' z
-do
+for ac_lib in '' z; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"
-then :
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_deflate=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test ${ac_cv_search_deflate+y}
-then :
+ if ${ac_cv_search_deflate+:} false; then :
break
fi
done
-if test ${ac_cv_search_deflate+y}
-then :
+if ${ac_cv_search_deflate+:} false; then :
-else $as_nop
+else
ac_cv_search_deflate=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_deflate" >&5
-printf "%s\n" "$ac_cv_search_deflate" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_deflate" >&5
+$as_echo "$ac_cv_search_deflate" >&6; }
ac_res=$ac_cv_search_deflate
-if test "$ac_res" != no
-then :
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
HAVE_ZLIB="-DSQLITE_HAVE_ZLIB=1"
-else $as_nop
+else
HAVE_ZLIB=""
fi
@@ -11982,21 +11445,19 @@ fi
#########
# See whether we should allow loadable extensions
# Check whether --enable-load-extension was given.
-if test ${enable_load_extension+y}
-then :
+if test "${enable_load_extension+set}" = set; then :
enableval=$enable_load_extension;
-else $as_nop
+else
enable_load_extension=yes
fi
if test "${enable_load_extension}" = "yes" ; then
OPT_FEATURE_FLAGS=""
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
-printf %s "checking for library containing dlopen... " >&6; }
-if test ${ac_cv_search_dlopen+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
+$as_echo_n "checking for library containing dlopen... " >&6; }
+if ${ac_cv_search_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -12004,48 +11465,46 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char dlopen ();
int
-main (void)
+main ()
{
return dlopen ();
;
return 0;
}
_ACEOF
-for ac_lib in '' dl
-do
+for ac_lib in '' dl; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"
-then :
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_dlopen=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test ${ac_cv_search_dlopen+y}
-then :
+ if ${ac_cv_search_dlopen+:} false; then :
break
fi
done
-if test ${ac_cv_search_dlopen+y}
-then :
+if ${ac_cv_search_dlopen+:} false; then :
-else $as_nop
+else
ac_cv_search_dlopen=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
-printf "%s\n" "$ac_cv_search_dlopen" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
+$as_echo "$ac_cv_search_dlopen" >&6; }
ac_res=$ac_cv_search_dlopen
-if test "$ac_res" != no
-then :
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
@@ -12058,26 +11517,24 @@ fi
# Do we want to support math functions
#
# Check whether --enable-math was given.
-if test ${enable_math+y}
-then :
+if test "${enable_math+set}" = set; then :
enableval=$enable_math;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support math functions" >&5
-printf %s "checking whether to support math functions... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support math functions" >&5
+$as_echo_n "checking whether to support math functions... " >&6; }
if test "$enable_math" = "no"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_MATH_FUNCTIONS"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing ceil" >&5
-printf %s "checking for library containing ceil... " >&6; }
-if test ${ac_cv_search_ceil+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ceil" >&5
+$as_echo_n "checking for library containing ceil... " >&6; }
+if ${ac_cv_search_ceil+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -12085,48 +11542,46 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char ceil ();
int
-main (void)
+main ()
{
return ceil ();
;
return 0;
}
_ACEOF
-for ac_lib in '' m
-do
+for ac_lib in '' m; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"
-then :
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_ceil=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test ${ac_cv_search_ceil+y}
-then :
+ if ${ac_cv_search_ceil+:} false; then :
break
fi
done
-if test ${ac_cv_search_ceil+y}
-then :
+if ${ac_cv_search_ceil+:} false; then :
-else $as_nop
+else
ac_cv_search_ceil=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ceil" >&5
-printf "%s\n" "$ac_cv_search_ceil" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ceil" >&5
+$as_echo "$ac_cv_search_ceil" >&6; }
ac_res=$ac_cv_search_ceil
-if test "$ac_res" != no
-then :
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
@@ -12137,203 +11592,26 @@ fi
# Do we want to support JSON functions
#
# Check whether --enable-json was given.
-if test ${enable_json+y}
-then :
+if test "${enable_json+set}" = set; then :
enableval=$enable_json;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support JSON functions" >&5
-printf %s "checking whether to support JSON functions... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support JSON functions" >&5
+$as_echo_n "checking whether to support JSON functions... " >&6; }
if test "$enable_json" = "no"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_OMIT_JSON"
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
-fi
-
-##########
-# Do we want to support vector functions
-#
-# Check whether --enable-vector was given.
-if test ${enable_vector+y}
-then :
- enableval=$enable_vector;
-fi
-
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support vector functions" >&5
-printf %s "checking whether to support vector functions... " >&6; }
-if test "$enable_vector" = "no"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
- OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_OMIT_VECTOR"
-else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
-fi
-
-##########
-# Do we want to support WebAssembly runtime
-#
-# Check whether --enable-wasm_runtime was given.
-if test ${enable_wasm_runtime+y}
-then :
- enableval=$enable_wasm_runtime;
-fi
-
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support WebAssembly integration" >&5
-printf %s "checking whether to support WebAssembly integration... " >&6; }
-# Check whether --enable-wasm_runtime_dynamic was given.
-if test ${enable_wasm_runtime_dynamic+y}
-then :
- enableval=$enable_wasm_runtime_dynamic;
-fi
-
-# Check whether --enable-wasm_runtime_wasmedge was given.
-if test ${enable_wasm_runtime_wasmedge+y}
-then :
- enableval=$enable_wasm_runtime_wasmedge;
-fi
-
-if test "$enable_wasm_runtime" = "yes" \
- -o "$enable_wasm_runtime_dynamic" = "yes" \
- -o "$enable_wasm_runtime_wasmedge" = "yes"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
- OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DLIBSQL_ENABLE_WASM_RUNTIME"
- # Extract the first word of "cargo", so it can be a program name with args.
-set dummy cargo; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_CARGO_BIN+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- if test -n "$CARGO_BIN"; then
- ac_cv_prog_CARGO_BIN="$CARGO_BIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
- ac_cv_prog_CARGO_BIN=""
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CARGO_BIN=$ac_cv_prog_CARGO_BIN
-if test -n "$CARGO_BIN"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CARGO_BIN" >&5
-printf "%s\n" "$CARGO_BIN" >&6; }
-else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to set up WebAssembly runtime" >&5
-printf %s "checking how to set up WebAssembly runtime... " >&6; }
- if test "$enable_wasm_runtime_dynamic" = "yes"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: link dynamically" >&5
-printf "%s\n" "link dynamically" >&6; }
- OPT_WASM_RUNTIME=d
- elif test "$enable_wasm_runtime_wasmedge" = "yes"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: link libwasmedge" >&5
-printf "%s\n" "link libwasmedge" >&6; }
- OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DLIBSQL_ENABLE_WASM_RUNTIME_WASMEDGE"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing WasmEdge_VMInstantiate" >&5
-printf %s "checking for library containing WasmEdge_VMInstantiate... " >&6; }
-if test ${ac_cv_search_WasmEdge_VMInstantiate+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-char WasmEdge_VMInstantiate ();
-int
-main (void)
-{
-return WasmEdge_VMInstantiate ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' wasmedge
-do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"
-then :
- ac_cv_search_WasmEdge_VMInstantiate=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
- conftest$ac_exeext
- if test ${ac_cv_search_WasmEdge_VMInstantiate+y}
-then :
- break
-fi
-done
-if test ${ac_cv_search_WasmEdge_VMInstantiate+y}
-then :
-
-else $as_nop
- ac_cv_search_WasmEdge_VMInstantiate=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_WasmEdge_VMInstantiate" >&5
-printf "%s\n" "$ac_cv_search_WasmEdge_VMInstantiate" >&6; }
-ac_res=$ac_cv_search_WasmEdge_VMInstantiate
-if test "$ac_res" != no
-then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-else $as_nop
- as_fn_error $? "\"WasmEdge library not found - install libwasmedge\"" "$LINENO" 5
-fi
-
- OPT_WASM_RUNTIME=wasmedge
- else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: link statically" >&5
-printf "%s\n" "link statically" >&6; }
- OPT_WASM_RUNTIME=y # static linking
- fi
-else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
- OPT_WASM_RUNTIME=n
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
fi
-
########
# The --enable-all argument is short-hand to enable
# multiple extensions.
# Check whether --enable-all was given.
-if test ${enable_all+y}
-then :
+if test "${enable_all+set}" = set; then :
enableval=$enable_all;
fi
@@ -12342,74 +11620,69 @@ fi
# Do we want to support memsys3 and/or memsys5
#
# Check whether --enable-memsys5 was given.
-if test ${enable_memsys5+y}
-then :
+if test "${enable_memsys5+set}" = set; then :
enableval=$enable_memsys5;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support MEMSYS5" >&5
-printf %s "checking whether to support MEMSYS5... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support MEMSYS5" >&5
+$as_echo_n "checking whether to support MEMSYS5... " >&6; }
if test "${enable_memsys5}" = "yes"; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_MEMSYS5"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
# Check whether --enable-memsys3 was given.
-if test ${enable_memsys3+y}
-then :
+if test "${enable_memsys3+set}" = set; then :
enableval=$enable_memsys3;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support MEMSYS3" >&5
-printf %s "checking whether to support MEMSYS3... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support MEMSYS3" >&5
+$as_echo_n "checking whether to support MEMSYS3... " >&6; }
if test "${enable_memsys3}" = "yes" -a "${enable_memsys5}" = "no"; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_MEMSYS3"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
#########
# See whether we should enable Full Text Search extensions
# Check whether --enable-fts3 was given.
-if test ${enable_fts3+y}
-then :
+if test "${enable_fts3+set}" = set; then :
enableval=$enable_fts3;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support FTS3" >&5
-printf %s "checking whether to support FTS3... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support FTS3" >&5
+$as_echo_n "checking whether to support FTS3... " >&6; }
if test "${enable_fts3}" = "yes" ; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS3"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
# Check whether --enable-fts4 was given.
-if test ${enable_fts4+y}
-then :
+if test "${enable_fts4+set}" = set; then :
enableval=$enable_fts4;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support FTS4" >&5
-printf %s "checking whether to support FTS4... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support FTS4" >&5
+$as_echo_n "checking whether to support FTS4... " >&6; }
if test "${enable_fts4}" = "yes" -o "${enable_all}" = "yes" ; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS4"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing log" >&5
-printf %s "checking for library containing log... " >&6; }
-if test ${ac_cv_search_log+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing log" >&5
+$as_echo_n "checking for library containing log... " >&6; }
+if ${ac_cv_search_log+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -12417,74 +11690,70 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char log ();
int
-main (void)
+main ()
{
return log ();
;
return 0;
}
_ACEOF
-for ac_lib in '' m
-do
+for ac_lib in '' m; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"
-then :
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_log=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test ${ac_cv_search_log+y}
-then :
+ if ${ac_cv_search_log+:} false; then :
break
fi
done
-if test ${ac_cv_search_log+y}
-then :
+if ${ac_cv_search_log+:} false; then :
-else $as_nop
+else
ac_cv_search_log=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_log" >&5
-printf "%s\n" "$ac_cv_search_log" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_log" >&5
+$as_echo "$ac_cv_search_log" >&6; }
ac_res=$ac_cv_search_log
-if test "$ac_res" != no
-then :
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
# Check whether --enable-fts5 was given.
-if test ${enable_fts5+y}
-then :
+if test "${enable_fts5+set}" = set; then :
enableval=$enable_fts5;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support FTS5" >&5
-printf %s "checking whether to support FTS5... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support FTS5" >&5
+$as_echo_n "checking whether to support FTS5... " >&6; }
if test "${enable_fts5}" = "yes" -o "${enable_all}" = "yes" ; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_FTS5"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing log" >&5
-printf %s "checking for library containing log... " >&6; }
-if test ${ac_cv_search_log+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing log" >&5
+$as_echo_n "checking for library containing log... " >&6; }
+if ${ac_cv_search_log+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -12492,136 +11761,130 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
char log ();
int
-main (void)
+main ()
{
return log ();
;
return 0;
}
_ACEOF
-for ac_lib in '' m
-do
+for ac_lib in '' m; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
- if ac_fn_c_try_link "$LINENO"
-then :
+ if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_log=$ac_res
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
+rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
- if test ${ac_cv_search_log+y}
-then :
+ if ${ac_cv_search_log+:} false; then :
break
fi
done
-if test ${ac_cv_search_log+y}
-then :
+if ${ac_cv_search_log+:} false; then :
-else $as_nop
+else
ac_cv_search_log=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_log" >&5
-printf "%s\n" "$ac_cv_search_log" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_log" >&5
+$as_echo "$ac_cv_search_log" >&6; }
ac_res=$ac_cv_search_log
-if test "$ac_res" != no
-then :
+if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
#########
# See whether we should enable the LIMIT clause on UPDATE and DELETE
# statements.
# Check whether --enable-update-limit was given.
-if test ${enable_update_limit+y}
-then :
+if test "${enable_update_limit+set}" = set; then :
enableval=$enable_update_limit;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support LIMIT on UPDATE and DELETE statements" >&5
-printf %s "checking whether to support LIMIT on UPDATE and DELETE statements... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support LIMIT on UPDATE and DELETE statements" >&5
+$as_echo_n "checking whether to support LIMIT on UPDATE and DELETE statements... " >&6; }
if test "${enable_update_limit}" = "yes" ; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
#########
# See whether we should enable GEOPOLY
# Check whether --enable-geopoly was given.
-if test ${enable_geopoly+y}
-then :
+if test "${enable_geopoly+set}" = set; then :
enableval=$enable_geopoly; enable_geopoly=yes
-else $as_nop
+else
enable_geopoly=no
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support GEOPOLY" >&5
-printf %s "checking whether to support GEOPOLY... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support GEOPOLY" >&5
+$as_echo_n "checking whether to support GEOPOLY... " >&6; }
if test "${enable_geopoly}" = "yes" -o "${enable_all}" = "yes" ; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_GEOPOLY"
enable_rtree=yes
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
#########
# See whether we should enable RTREE
# Check whether --enable-rtree was given.
-if test ${enable_rtree+y}
-then :
+if test "${enable_rtree+set}" = set; then :
enableval=$enable_rtree;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support RTREE" >&5
-printf %s "checking whether to support RTREE... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support RTREE" >&5
+$as_echo_n "checking whether to support RTREE... " >&6; }
if test "${enable_rtree}" = "yes" ; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_RTREE"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
#########
# See whether we should enable the SESSION extension
# Check whether --enable-session was given.
-if test ${enable_session+y}
-then :
+if test "${enable_session+set}" = set; then :
enableval=$enable_session;
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support SESSION" >&5
-printf %s "checking whether to support SESSION... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support SESSION" >&5
+$as_echo_n "checking whether to support SESSION... " >&6; }
if test "${enable_session}" = "yes" -o "${enable_all}" = "yes" ; then
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_SESSION"
OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_PREUPDATE_HOOK"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
#########
@@ -12678,8 +11941,7 @@ BUILD_CFLAGS=$ac_temp_BUILD_CFLAGS
#########
# See whether we should use GCOV
# Check whether --enable-gcov was given.
-if test ${enable_gcov+y}
-then :
+if test "${enable_gcov+set}" = set; then :
enableval=$enable_gcov;
fi
@@ -12711,7 +11973,7 @@ ac_config_headers="$ac_config_headers sqlite_cfg.h"
# Generate the output files.
#
-ac_config_files="$ac_config_files Makefile sqlite3.pc libsql.pc"
+ac_config_files="$ac_config_files Makefile sqlite3.pc"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -12740,8 +12002,8 @@ _ACEOF
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
- *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
@@ -12771,15 +12033,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;}
/^ac_cv_env_/b end
t clear
:clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
@@ -12793,8 +12055,8 @@ printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
fi
fi
else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
@@ -12811,7 +12073,7 @@ U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -12827,8 +12089,8 @@ LTLIBOBJS=$ac_ltlibobjs
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
@@ -12851,16 +12113,14 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
-as_nop=:
-if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
-then :
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
-else $as_nop
+else
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
@@ -12870,46 +12130,46 @@ esac
fi
-
-# Reset variables that may have inherited troublesome values from
-# the environment.
-
-# IFS needs to be set, to space, tab, and newline, in precisely that order.
-# (If _AS_PATH_WALK were called with IFS unset, it would have the
-# side effect of setting IFS to empty, thus disabling word splitting.)
-# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
-IFS=" "" $as_nl"
-
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# Ensure predictable behavior from utilities with locale-dependent output.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# We cannot yet rely on "unset" to work, but we need these variables
-# to be unset--not just set to an empty or harmless value--now, to
-# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
-# also avoids known problems related to "unset" and subshell syntax
-# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
-for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
-do eval test \${$as_var+y} \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-
-# Ensure that fds 0, 1, and 2 are open.
-if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
-if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
# The user is always right.
-if ${PATH_SEPARATOR+false} :; then
+if test "${PATH_SEPARATOR+set}" != set; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -12918,6 +12178,13 @@ if ${PATH_SEPARATOR+false} :; then
fi
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
@@ -12926,12 +12193,8 @@ case $0 in #((
for as_dir in $PATH
do
IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- test -r "$as_dir$0" && as_myself=$as_dir$0 && break
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
done
IFS=$as_save_IFS
@@ -12943,10 +12206,30 @@ if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
- printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -12959,14 +12242,13 @@ as_fn_error ()
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
- printf "%s\n" "$as_me: error: $2" >&2
+ $as_echo "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
-
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
@@ -12993,20 +12275,18 @@ as_fn_unset ()
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
-
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
-then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
-else $as_nop
+else
as_fn_append ()
{
eval $1=\$$1\$2
@@ -13018,13 +12298,12 @@ fi # as_fn_append
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
-then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
-else $as_nop
+else
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
@@ -13055,7 +12334,7 @@ as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-printf "%s\n" X/"$0" |
+$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
@@ -13077,10 +12356,6 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# Determine whether it's possible to make 'echo' print without a newline.
-# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
-# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
@@ -13094,12 +12369,6 @@ case `echo -n x` in #(((((
ECHO_N='-n';;
esac
-# For backward compatibility with old third-party macros, we provide
-# the shell variables $as_echo and $as_echo_n. New code should use
-# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
-as_echo='printf %s\n'
-as_echo_n='printf %s'
-
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
@@ -13141,7 +12410,7 @@ as_fn_mkdir_p ()
as_dirs=
while :; do
case $as_dir in #(
- *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
@@ -13150,7 +12419,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-printf "%s\n" X"$as_dir" |
+$as_echo X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -13212,7 +12481,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by sqlite $as_me 3.45.1, which was
+This file was extended by sqlite $as_me 3.46.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -13275,16 +12544,14 @@ $config_commands
Report bugs to the package provider."
_ACEOF
-ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
-ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config='$ac_cs_config_escaped'
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-sqlite config.status 3.45.1
+sqlite config.status 3.46.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
-Copyright (C) 2021 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
@@ -13322,15 +12589,15 @@ do
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- printf "%s\n" "$ac_cs_version"; exit ;;
+ $as_echo "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
- printf "%s\n" "$ac_cs_config"; exit ;;
+ $as_echo "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
@@ -13338,7 +12605,7 @@ do
--header | --heade | --head | --hea )
$ac_shift
case $ac_optarg in
- *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
as_fn_append CONFIG_HEADERS " '$ac_optarg'"
ac_need_defaults=false;;
@@ -13347,7 +12614,7 @@ do
as_fn_error $? "ambiguous option: \`$1'
Try \`$0 --help' for more information.";;
--help | --hel | -h )
- printf "%s\n" "$ac_cs_usage"; exit ;;
+ $as_echo "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
@@ -13375,7 +12642,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
- \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
@@ -13389,7 +12656,7 @@ exec 5>>config.log
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
- printf "%s\n" "$ac_log"
+ $as_echo "$ac_log"
} >&5
_ACEOF
@@ -13665,7 +12932,6 @@ do
"sqlite_cfg.h") CONFIG_HEADERS="$CONFIG_HEADERS sqlite_cfg.h" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"sqlite3.pc") CONFIG_FILES="$CONFIG_FILES sqlite3.pc" ;;
- "libsql.pc") CONFIG_FILES="$CONFIG_FILES libsql.pc" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
@@ -13677,9 +12943,9 @@ done
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
- test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
- test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers
- test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
fi
# Have a temporary directory for convenience. Make it in the build tree
@@ -14015,7 +13281,7 @@ do
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
- case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
@@ -14023,17 +13289,17 @@ do
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
- printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-printf "%s\n" "$as_me: creating $ac_file" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
- ac_sed_conf_input=`printf "%s\n" "$configure_input" |
+ ac_sed_conf_input=`$as_echo "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
@@ -14050,7 +13316,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-printf "%s\n" X"$ac_file" |
+$as_echo X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
@@ -14074,9 +13340,9 @@ printf "%s\n" X"$ac_file" |
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
- ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -14133,8 +13399,8 @@ ac_sed_dataroot='
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
@@ -14177,9 +13443,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
-printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
@@ -14195,27 +13461,27 @@ which seems to be undefined. Please make sure it is defined" >&2;}
#
if test x"$ac_file" != x-; then
{
- printf "%s\n" "/* $configure_input */" >&1 \
+ $as_echo "/* $configure_input */" \
&& eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
} >"$ac_tmp/config.h" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-printf "%s\n" "$as_me: $ac_file is unchanged" >&6;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
else
rm -f "$ac_file"
mv "$ac_tmp/config.h" "$ac_file" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
fi
else
- printf "%s\n" "/* $configure_input */" >&1 \
+ $as_echo "/* $configure_input */" \
&& eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
|| as_fn_error $? "could not create -" "$LINENO" 5
fi
;;
- :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-printf "%s\n" "$as_me: executing $ac_file commands" >&6;}
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
;;
esac
@@ -14639,7 +13905,6 @@ _LT_EOF
esac
-
ltmain="$ac_aux_dir/ltmain.sh"
@@ -14891,8 +14156,7 @@ if test "$no_create" != yes; then
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
-
diff --git a/libsql-sqlite3/doc/lemon.html b/libsql-sqlite3/doc/lemon.html
index 66665f46f3..4147d9b31e 100644
--- a/libsql-sqlite3/doc/lemon.html
+++ b/libsql-sqlite3/doc/lemon.html
@@ -683,6 +683,7 @@
the wildcard token and some other token, the other token is always used.
The wildcard token is only matched if there are no alternatives.
+
+
4.4.26 The %realloc and %free directives
+
+
The %realloc and %free directives defines function
+that allocate and free heap memory. The signatures of these functions
+should be the same as the realloc() and free() functions from the standard
+C library.
+
+
If both of these functions are defined
+then these functions are used to allocate and free
+memory for supplemental parser stack space, if the initial
+parse stack space is exceeded. The initial parser stack size
+is specified by either %stack_size or the
+-DYYSTACKDEPTH compile-time flag.
+
5.0 Error Processing
@@ -1224,6 +1241,7 @@
5.0 Error Processing
first syntax error, of course, if there are no instances of the
"error" non-terminal in your grammar.
+
6.0 History of Lemon
diff --git a/libsql-sqlite3/doc/testrunner.md b/libsql-sqlite3/doc/testrunner.md
index b81724b39c..d0248573ee 100644
--- a/libsql-sqlite3/doc/testrunner.md
+++ b/libsql-sqlite3/doc/testrunner.md
@@ -1,33 +1,45 @@
+
# The testrunner.tcl Script
-1. [Overview](#overview)
-2. [Binary Tests](#binary_tests)
- 1. [Organization of Tcl Tests](#organization_tests)
- 2. [Commands to Run Tests](#run_tests)
- 3. [Investigating Binary Test Failures](#binary_test_failures)
-3. [Source Code Tests](#source_code_tests)
- 1. [Commands to Run SQLite Tests](#commands_to_run_tests)
- 2. [ZipVFS Tests](#zipvfs_tests)
- 3. [Source Code Test Failures](#source_code_test_failures)
- 4. [Investigating Source Code Test Failures](#binary_test_failures)
-4. [Extra testrunner.tcl Options](#testrunner_options)
-5. [Controlling CPU Core Utilization](#cpu_cores)
+