|
|
@@ -233,7 +233,7 @@ extern "C" {
|
|
|
*/
|
|
|
#define SQLITE_VERSION "3.8.8"
|
|
|
#define SQLITE_VERSION_NUMBER 3008008
|
|
|
-#define SQLITE_SOURCE_ID "2014-12-06 02:05:44 dd1dd4451f468599f7a0c2f7b5ee6125db3bb152"
|
|
|
+#define SQLITE_SOURCE_ID "2014-12-09 22:24:42 cf9be419a16156a9814e1378bb49b780de977343"
|
|
|
|
|
|
/*
|
|
|
** CAPI3REF: Run-Time Library Version Numbers
|
|
|
@@ -5317,9 +5317,17 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
|
|
|
/*
|
|
|
** CAPI3REF: Extract Metadata About A Column Of A Table
|
|
|
**
|
|
|
-** ^This routine returns metadata about a specific column of a specific
|
|
|
-** database table accessible using the [database connection] handle
|
|
|
-** passed as the first function argument.
|
|
|
+** ^The sqlite3_table_column_metadata(X,D,T,C,....) routine returns
|
|
|
+** information about column C of table T in database D
|
|
|
+** on [database connection] X. ^The sqlite3_table_column_metadata()
|
|
|
+** interface returns SQLITE_OK and fills in the non-NULL pointers in
|
|
|
+** the final five arguments with appropriate vaules if the specified
|
|
|
+** column exists. ^The sqlite3_table_column_metadata() interface returns
|
|
|
+** SQLITE_ERROR and if the specified column does not exist.
|
|
|
+** If the column-name parameter to sqlite3_table_column_metadata() is a
|
|
|
+** NULL pointer, then the routine simply checks for the existance of the
|
|
|
+** table and returns SQLITE_OK if the table exists and SQLITE_ERROR if it
|
|
|
+** does not.
|
|
|
**
|
|
|
** ^The column is identified by the second, third and fourth parameters to
|
|
|
** this function. ^The second parameter is either the name of the database
|
|
|
@@ -5329,8 +5337,7 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
|
|
|
** resolve unqualified table references.
|
|
|
**
|
|
|
** ^The third and fourth parameters to this function are the table and column
|
|
|
-** name of the desired column, respectively. Neither of these parameters
|
|
|
-** may be NULL.
|
|
|
+** name of the desired column, respectively.
|
|
|
**
|
|
|
** ^Metadata is returned by writing to the memory locations passed as the 5th
|
|
|
** and subsequent parameters to this function. ^Any of these arguments may be
|
|
|
@@ -5349,16 +5356,17 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
|
|
|
** </blockquote>)^
|
|
|
**
|
|
|
** ^The memory pointed to by the character pointers returned for the
|
|
|
-** declaration type and collation sequence is valid only until the next
|
|
|
+** declaration type and collation sequence is valid until the next
|
|
|
** call to any SQLite API function.
|
|
|
**
|
|
|
** ^If the specified table is actually a view, an [error code] is returned.
|
|
|
**
|
|
|
-** ^If the specified column is "rowid", "oid" or "_rowid_" and an
|
|
|
+** ^If the specified column is "rowid", "oid" or "_rowid_" and the table
|
|
|
+** is not a [WITHOUT ROWID] table and an
|
|
|
** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output
|
|
|
** parameters are set for the explicitly declared column. ^(If there is no
|
|
|
-** explicitly declared [INTEGER PRIMARY KEY] column, then the output
|
|
|
-** parameters are set as follows:
|
|
|
+** [INTEGER PRIMARY KEY] column, then the outputs
|
|
|
+** for the [rowid] are set as follows:
|
|
|
**
|
|
|
** <pre>
|
|
|
** data type: "INTEGER"
|
|
|
@@ -5368,13 +5376,9 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
|
|
|
** auto increment: 0
|
|
|
** </pre>)^
|
|
|
**
|
|
|
-** ^(This function may load one or more schemas from database files. If an
|
|
|
-** error occurs during this process, or if the requested table or column
|
|
|
-** cannot be found, an [error code] is returned and an error message left
|
|
|
-** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^
|
|
|
-**
|
|
|
-** ^This API is only available if the library was compiled with the
|
|
|
-** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined.
|
|
|
+** ^This function causes all database schemas to be read from disk and
|
|
|
+** parsed, if that has not already been done, and returns an error if
|
|
|
+** any errors are encountered while loading the schema.
|
|
|
*/
|
|
|
SQLITE_API int sqlite3_table_column_metadata(
|
|
|
sqlite3 *db, /* Connection handle */
|
|
|
@@ -59530,7 +59534,7 @@ static int balance_nonroot(
|
|
|
|
|
|
/* EVIDENCE-OF: R-28375-38319 SQLite will never request a scratch buffer
|
|
|
** that is more than 6 times the database page size. */
|
|
|
- assert( szScratch<=6*pBt->pageSize );
|
|
|
+ assert( szScratch<=6*(int)pBt->pageSize );
|
|
|
apCell = sqlite3ScratchMalloc( szScratch );
|
|
|
if( apCell==0 ){
|
|
|
rc = SQLITE_NOMEM;
|
|
|
@@ -59604,7 +59608,11 @@ static int balance_nonroot(
|
|
|
}else{
|
|
|
assert( leafCorrection==4 );
|
|
|
if( szCell[nCell]<4 ){
|
|
|
- /* Do not allow any cells smaller than 4 bytes. */
|
|
|
+ /* Do not allow any cells smaller than 4 bytes. If a smaller cell
|
|
|
+ ** does exist, pad it with 0x00 bytes. */
|
|
|
+ assert( szCell[nCell]==3 );
|
|
|
+ assert( apCell[nCell]==&pTemp[iSpace1-3] );
|
|
|
+ pTemp[iSpace1++] = 0x00;
|
|
|
szCell[nCell] = 4;
|
|
|
}
|
|
|
}
|
|
|
@@ -77626,7 +77634,9 @@ struct SorterRecord {
|
|
|
|
|
|
/* The minimum PMA size is set to this value multiplied by the database
|
|
|
** page size in bytes. */
|
|
|
-#define SORTER_MIN_WORKING 10
|
|
|
+#ifndef SQLITE_SORTER_PMASZ
|
|
|
+# define SQLITE_SORTER_PMASZ 10
|
|
|
+#endif
|
|
|
|
|
|
/* Maximum number of PMAs that a single MergeEngine can merge */
|
|
|
#define SORTER_MAX_MERGE_COUNT 16
|
|
|
@@ -78025,9 +78035,9 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit(
|
|
|
}
|
|
|
|
|
|
if( !sqlite3TempInMemory(db) ){
|
|
|
- pSorter->mnPmaSize = SORTER_MIN_WORKING * pgsz;
|
|
|
+ pSorter->mnPmaSize = SQLITE_SORTER_PMASZ * pgsz;
|
|
|
mxCache = db->aDb[0].pSchema->cache_size;
|
|
|
- if( mxCache<SORTER_MIN_WORKING ) mxCache = SORTER_MIN_WORKING;
|
|
|
+ if( mxCache<SQLITE_SORTER_PMASZ ) mxCache = SQLITE_SORTER_PMASZ;
|
|
|
pSorter->mxPmaSize = MIN((i64)mxCache*pgsz, SQLITE_MAX_MXPMASIZE);
|
|
|
|
|
|
/* EVIDENCE-OF: R-26747-61719 When the application provides any amount of
|
|
|
@@ -101324,7 +101334,6 @@ struct sqlite3_api_routines {
|
|
|
# define sqlite3_column_table_name16 0
|
|
|
# define sqlite3_column_origin_name 0
|
|
|
# define sqlite3_column_origin_name16 0
|
|
|
-# define sqlite3_table_column_metadata 0
|
|
|
#endif
|
|
|
|
|
|
#ifdef SQLITE_OMIT_AUTHORIZATION
|
|
|
@@ -127518,11 +127527,13 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
|
|
|
if( pDb->pBt ){
|
|
|
if( pDb->pSchema ){
|
|
|
/* Must clear the KeyInfo cache. See ticket [e4a18565a36884b00edf] */
|
|
|
+ sqlite3BtreeEnter(pDb->pBt);
|
|
|
for(i=sqliteHashFirst(&pDb->pSchema->idxHash); i; i=sqliteHashNext(i)){
|
|
|
Index *pIdx = sqliteHashData(i);
|
|
|
sqlite3KeyInfoUnref(pIdx->pKeyInfo);
|
|
|
pIdx->pKeyInfo = 0;
|
|
|
}
|
|
|
+ sqlite3BtreeLeave(pDb->pBt);
|
|
|
}
|
|
|
sqlite3BtreeClose(pDb->pBt);
|
|
|
pDb->pBt = 0;
|
|
|
@@ -129230,6 +129241,9 @@ static int openDatabase(
|
|
|
#endif
|
|
|
#if defined(SQLITE_DEFAULT_FOREIGN_KEYS) && SQLITE_DEFAULT_FOREIGN_KEYS
|
|
|
| SQLITE_ForeignKeys
|
|
|
+#endif
|
|
|
+#if defined(SQLITE_REVERSE_UNORDERED_SELECTS)
|
|
|
+ | SQLITE_ReverseOrder
|
|
|
#endif
|
|
|
;
|
|
|
sqlite3HashInit(&db->aCollSeq);
|
|
|
@@ -129296,7 +129310,9 @@ static int openDatabase(
|
|
|
sqlite3Error(db, rc);
|
|
|
goto opendb_out;
|
|
|
}
|
|
|
+ sqlite3BtreeEnter(db->aDb[0].pBt);
|
|
|
db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt);
|
|
|
+ sqlite3BtreeLeave(db->aDb[0].pBt);
|
|
|
db->aDb[1].pSchema = sqlite3SchemaGet(db, 0);
|
|
|
|
|
|
/* The default safety_level for the main database is 'full'; for the temp
|
|
|
@@ -129668,7 +129684,6 @@ SQLITE_API void sqlite3_thread_cleanup(void){
|
|
|
** Return meta information about a specific column of a database table.
|
|
|
** See comment in sqlite3.h (sqlite.h.in) for details.
|
|
|
*/
|
|
|
-#ifdef SQLITE_ENABLE_COLUMN_METADATA
|
|
|
SQLITE_API int sqlite3_table_column_metadata(
|
|
|
sqlite3 *db, /* Connection handle */
|
|
|
const char *zDbName, /* Database name or NULL */
|
|
|
@@ -129708,11 +129723,8 @@ SQLITE_API int sqlite3_table_column_metadata(
|
|
|
}
|
|
|
|
|
|
/* Find the column for which info is requested */
|
|
|
- if( sqlite3IsRowid(zColumnName) ){
|
|
|
- iCol = pTab->iPKey;
|
|
|
- if( iCol>=0 ){
|
|
|
- pCol = &pTab->aCol[iCol];
|
|
|
- }
|
|
|
+ if( zColumnName==0 ){
|
|
|
+ /* Query for existance of table only */
|
|
|
}else{
|
|
|
for(iCol=0; iCol<pTab->nCol; iCol++){
|
|
|
pCol = &pTab->aCol[iCol];
|
|
|
@@ -129721,8 +129733,13 @@ SQLITE_API int sqlite3_table_column_metadata(
|
|
|
}
|
|
|
}
|
|
|
if( iCol==pTab->nCol ){
|
|
|
- pTab = 0;
|
|
|
- goto error_out;
|
|
|
+ if( HasRowid(pTab) && sqlite3IsRowid(zColumnName) ){
|
|
|
+ iCol = pTab->iPKey;
|
|
|
+ pCol = iCol>=0 ? &pTab->aCol[iCol] : 0;
|
|
|
+ }else{
|
|
|
+ pTab = 0;
|
|
|
+ goto error_out;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -129775,7 +129792,6 @@ error_out:
|
|
|
sqlite3_mutex_leave(db->mutex);
|
|
|
return rc;
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
/*
|
|
|
** Sleep for a little while. Return the amount of time slept.
|