Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Use ~/.fossil4 as the configuration database to avoid conflicts with the original fossil. Adjust SQL because INTEGER PRIMARY KEY does not auto-fill as with SQLite3. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | sqlite4 |
| Files: | files | file ages | folders |
| SHA1: |
3f624d490b0696b85301eb7f618203bd |
| User & Date: | drh 2012-06-27 13:59:08.497 |
Context
|
2012-06-29
| ||
| 15:47 | Merge in the trunk changes. check-in: 0315f3f03b user: drh tags: sqlite4 | |
|
2012-06-27
| ||
| 13:59 | Use ~/.fossil4 as the configuration database to avoid conflicts with the original fossil. Adjust SQL because INTEGER PRIMARY KEY does not auto-fill as with SQLite3. check-in: 3f624d490b user: drh tags: sqlite4 | |
| 12:30 | Begin a branch that is modified to use sqlite4 instead of sqlite3 as the storage engine. This check-in compiles (on unix) but does not work. check-in: 6823912746 user: drh tags: sqlite4 | |
Changes
Changes to src/db.c.
| ︙ | ︙ | |||
761 762 763 764 765 766 767 |
if( access(zHome, W_OK) ){
fossil_fatal("home directory %s must be writeable", zHome);
}
#endif
g.zHome = mprintf("%/", zHome);
#if defined(_WIN32)
/* . filenames give some window systems problems and many apps problems */
| | | | 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 |
if( access(zHome, W_OK) ){
fossil_fatal("home directory %s must be writeable", zHome);
}
#endif
g.zHome = mprintf("%/", zHome);
#if defined(_WIN32)
/* . filenames give some window systems problems and many apps problems */
zDbName = mprintf("%//_fossil4", zHome);
#else
zDbName = mprintf("%s/.fossil4", zHome);
#endif
if( file_size(zDbName)<1024*3 ){
db_init_database(zDbName, zConfigSchema, (char*)0);
}
g.useAttach = useAttach;
if( useAttach ){
db_open_or_attach(zDbName, "configdb");
|
| ︙ | ︙ |
Changes to src/sqlite4.c.
| ︙ | ︙ | |||
712 713 714 715 716 717 718 | ** ** See also: [sqlite4_libversion()], ** [sqlite4_libversion_number()], [sqlite4_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ #define SQLITE_VERSION "4.0.0" #define SQLITE_VERSION_NUMBER 4000000 | | | 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 | ** ** See also: [sqlite4_libversion()], ** [sqlite4_libversion_number()], [sqlite4_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ #define SQLITE_VERSION "4.0.0" #define SQLITE_VERSION_NUMBER 4000000 #define SQLITE_SOURCE_ID "2012-06-27 13:56:22 bd2216554bbcf5eee88dc17d0d6ae165a7eddbe4" /* ** CAPIREF: Run-Time Library Version Numbers ** KEYWORDS: sqlite4_version, sqlite4_sourceid ** ** These interfaces provide the same information as the [SQLITE_VERSION], ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros |
| ︙ | ︙ | |||
805 806 807 808 809 810 811 |
** KEYWORDS: {database connection} {database connections}
**
** Each open SQLite database is represented by a pointer to an instance of
** the opaque structure named "sqlite4". It is useful to think of an sqlite4
** pointer as an object. The [sqlite4_open()]
** interface is its constructors, and [sqlite4_close()]
** is its destructor. There are many other interfaces (such as
| | | 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 |
** KEYWORDS: {database connection} {database connections}
**
** Each open SQLite database is represented by a pointer to an instance of
** the opaque structure named "sqlite4". It is useful to think of an sqlite4
** pointer as an object. The [sqlite4_open()]
** interface is its constructors, and [sqlite4_close()]
** is its destructor. There are many other interfaces (such as
** [sqlite4_prepare], [sqlite4_create_function()], and
** [sqlite4_busy_timeout()] to name but three) that are methods on an
** sqlite4 object.
*/
typedef struct sqlite4 sqlite4;
/*
** CAPIREF: 64-Bit Integer Types
|
| ︙ | ︙ | |||
892 893 894 895 896 897 898 | */ typedef int (*sqlite4_callback)(void*,int,char**, char**); /* ** CAPIREF: One-Step Query Execution Interface ** ** The sqlite4_exec() interface is a convenience wrapper around | | | 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 | */ typedef int (*sqlite4_callback)(void*,int,char**, char**); /* ** CAPIREF: One-Step Query Execution Interface ** ** The sqlite4_exec() interface is a convenience wrapper around ** [sqlite4_prepare()], [sqlite4_step()], and [sqlite4_finalize()], ** that allows an application to run multiple statements of SQL ** without having to use a lot of C code. ** ** ^The sqlite4_exec() interface runs zero or more UTF-8 encoded, ** semicolon-separate SQL statements passed into its 2nd argument, ** in the context of the [database connection] passed in as its 1st ** argument. ^If the callback function of the 3rd argument to |
| ︙ | ︙ | |||
1704 1705 1706 1707 1708 1709 1710 | /* ** CAPIREF: Compile-Time Authorization Callbacks ** ** ^This routine registers an authorizer callback with a particular ** [database connection], supplied in the first argument. ** ^The authorizer callback is invoked as SQL statements are being compiled | | | | | 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 | /* ** CAPIREF: Compile-Time Authorization Callbacks ** ** ^This routine registers an authorizer callback with a particular ** [database connection], supplied in the first argument. ** ^The authorizer callback is invoked as SQL statements are being compiled ** by [sqlite4_prepare()] or its variants [sqlite4_prepare()], ** [sqlite4_prepare16()] and [sqlite4_prepare16_v2()]. ^At various ** points during the compilation process, as logic is being created ** to perform various actions, the authorizer callback is invoked to ** see if those actions are allowed. ^The authorizer callback should ** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the ** specific action but allow the SQL statement to continue to be ** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be ** rejected with an error. ^If the authorizer callback returns ** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY] ** then the [sqlite4_prepare()] or equivalent call that triggered ** the authorizer will fail with an error message. ** ** When the callback returns [SQLITE_OK], that means the operation ** requested is ok. ^When the callback returns [SQLITE_DENY], the ** [sqlite4_prepare()] or equivalent call that triggered the ** authorizer will fail with an error message explaining that ** access is denied. ** ** ^The first parameter to the authorizer callback is a copy of the third ** parameter to the sqlite4_set_authorizer() interface. ^The second parameter ** to the callback is an integer [SQLITE_COPY | action code] that specifies ** the particular action to be authorized. ^The third through sixth parameters |
| ︙ | ︙ | |||
1764 1765 1766 1767 1768 1769 1770 | ** ^(Only a single authorizer can be in place on a database connection ** at a time. Each call to sqlite4_set_authorizer overrides the ** previous call.)^ ^Disable the authorizer by installing a NULL callback. ** The authorizer is disabled by default. ** ** The authorizer callback must not do anything that will modify ** the database connection that invoked the authorizer callback. | | | | | 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 | ** ^(Only a single authorizer can be in place on a database connection ** at a time. Each call to sqlite4_set_authorizer overrides the ** previous call.)^ ^Disable the authorizer by installing a NULL callback. ** The authorizer is disabled by default. ** ** The authorizer callback must not do anything that will modify ** the database connection that invoked the authorizer callback. ** Note that [sqlite4_prepare()] and [sqlite4_step()] both modify their ** database connections for the meaning of "modify" in this paragraph. ** ** ^When [sqlite4_prepare()] is used to prepare a statement, the ** statement might be re-prepared during [sqlite4_step()] due to a ** schema change. Hence, the application should ensure that the ** correct authorizer callback remains in place during the [sqlite4_step()]. ** ** ^Note that the authorizer callback is invoked only during ** [sqlite4_prepare()] or its variants. Authorization is not ** performed during statement evaluation in [sqlite4_step()], unless ** as stated in the previous paragraph, sqlite4_step() invokes ** sqlite4_prepare() to reprepare a statement after a schema change. */ SQLITE_API int sqlite4_set_authorizer( sqlite4*, int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), void *pUserData ); |
| ︙ | ︙ | |||
1908 1909 1910 1911 1912 1913 1914 | ** ** ^If the progress callback returns non-zero, the operation is ** interrupted. This feature can be used to implement a ** "Cancel" button on a GUI progress dialog box. ** ** The progress handler callback must not do anything that will modify ** the database connection that invoked the progress handler. | | | 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 | ** ** ^If the progress callback returns non-zero, the operation is ** interrupted. This feature can be used to implement a ** "Cancel" button on a GUI progress dialog box. ** ** The progress handler callback must not do anything that will modify ** the database connection that invoked the progress handler. ** Note that [sqlite4_prepare()] and [sqlite4_step()] both modify their ** database connections for the meaning of "modify" in this paragraph. ** */ SQLITE_API void sqlite4_progress_handler(sqlite4*, int, int(*)(void*), void*); /* ** CAPIREF: Opening A New Database Connection |
| ︙ | ︙ | |||
2025 2026 2027 2028 2029 2030 2031 | ** An instance of this object represents a single SQL statement. ** This object is variously known as a "prepared statement" or a ** "compiled SQL statement" or simply as a "statement". ** ** The life of a statement object goes something like this: ** ** <ol> | | | 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 | ** An instance of this object represents a single SQL statement. ** This object is variously known as a "prepared statement" or a ** "compiled SQL statement" or simply as a "statement". ** ** The life of a statement object goes something like this: ** ** <ol> ** <li> Create the object using [sqlite4_prepare()] or a related ** function. ** <li> Bind values to [host parameters] using the sqlite4_bind_*() ** interfaces. ** <li> Run the SQL by calling [sqlite4_step()] one or more times. ** <li> Reset the statement using [sqlite4_reset()] then go back ** to step 2. Do this zero or more times. ** <li> Destroy the object using [sqlite4_finalize()]. |
| ︙ | ︙ | |||
2157 2158 2159 2160 2161 2162 2163 | ** program using one of these routines. ** ** The first argument, "db", is a [database connection] obtained from a ** prior successful call to [sqlite4_open()]. ** The database connection must not have been closed. ** ** The second argument, "zSql", is the statement to be compiled, encoded | | | | | 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 | ** program using one of these routines. ** ** The first argument, "db", is a [database connection] obtained from a ** prior successful call to [sqlite4_open()]. ** The database connection must not have been closed. ** ** The second argument, "zSql", is the statement to be compiled, encoded ** as either UTF-8 or UTF-16. The sqlite4_prepare() ** interface uses UTF-8, and sqlite4_prepare16() ** uses UTF-16. ** ** ^If the nByte argument is less than zero, then zSql is read up to the ** first zero terminator. ^If nByte is non-negative, then it is the maximum ** number of bytes read from zSql. ^When nByte is non-negative, the ** zSql string ends at either the first '\000' or '\u0000' character or ** the nByte-th byte, whichever comes first. If the caller knows ** that the supplied string is nul-terminated, then there is a small |
| ︙ | ︙ | |||
2201 2202 2203 2204 2205 2206 2207 | ); /* ** CAPIREF: Retrieving Statement SQL ** ** ^This interface can be used to retrieve a saved copy of the original ** SQL text used to create a [prepared statement] if that statement was | | | 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 | ); /* ** CAPIREF: Retrieving Statement SQL ** ** ^This interface can be used to retrieve a saved copy of the original ** SQL text used to create a [prepared statement] if that statement was ** compiled using either [sqlite4_prepare()] or [sqlite4_prepare16_v2()]. */ SQLITE_API const char *sqlite4_sql(sqlite4_stmt *pStmt); /* ** CAPIREF: Determine If An SQL Statement Writes The Database ** ** ^The sqlite4_stmt_readonly(X) interface returns true (non-zero) if |
| ︙ | ︙ | |||
2313 2314 2315 2316 2317 2318 2319 |
typedef struct sqlite4_context sqlite4_context;
/*
** CAPIREF: Binding Values To Prepared Statements
** KEYWORDS: {host parameter} {host parameters} {host parameter name}
** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding}
**
| | | | 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 |
typedef struct sqlite4_context sqlite4_context;
/*
** CAPIREF: Binding Values To Prepared Statements
** KEYWORDS: {host parameter} {host parameters} {host parameter name}
** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding}
**
** ^(In the SQL statement text input to [sqlite4_prepare()] and its variants,
** literals may be replaced by a [parameter] that matches one of following
** templates:
**
** <ul>
** <li> ?
** <li> ?NNN
** <li> :VVV
** <li> @VVV
** <li> $VVV
** </ul>
**
** In the templates above, NNN represents an integer literal,
** and VVV represents an alphanumeric identifier.)^ ^The values of these
** parameters (also called "host parameter names" or "SQL parameters")
** can be set using the sqlite4_bind_*() routines defined here.
**
** ^The first argument to the sqlite4_bind_*() routines is always
** a pointer to the [sqlite4_stmt] object returned from
** [sqlite4_prepare()] or its variants.
**
** ^The second argument is the index of the SQL parameter to be set.
** ^The leftmost SQL parameter has an index of 1. ^When the same named
** SQL parameter is used more than once, second and subsequent
** occurrences have the same index as the first occurrence.
** ^The index for named parameters can be looked up using the
** [sqlite4_bind_parameter_index()] API if desired. ^The index
|
| ︙ | ︙ | |||
2606 2607 2608 2609 2610 2611 2612 | */ SQLITE_API const char *sqlite4_column_decltype(sqlite4_stmt*,int); SQLITE_API const void *sqlite4_column_decltype16(sqlite4_stmt*,int); /* ** CAPIREF: Evaluate An SQL Statement ** | | < < | < < < < < < < < < | | | 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 | */ SQLITE_API const char *sqlite4_column_decltype(sqlite4_stmt*,int); SQLITE_API const void *sqlite4_column_decltype16(sqlite4_stmt*,int); /* ** CAPIREF: Evaluate An SQL Statement ** ** After a [prepared statement] has been prepared using [sqlite4_prepare()], ** this function must be called one or more times to evaluate the statement. ** ** ^This routine can return any of the other [result codes] or ** [extended result codes]. ** ** ^[SQLITE_BUSY] means that the database engine was unable to acquire the ** database locks it needs to do its job. ^If the statement is a [COMMIT] ** or occurs outside of an explicit transaction, then you can retry the ** statement. If the statement is not a [COMMIT] and occurs within an ** explicit transaction then you should rollback the transaction before ** continuing. |
| ︙ | ︙ | |||
2643 2644 2645 2646 2647 2648 2649 | ** is returned each time a new row of data is ready for processing by the ** caller. The values may be accessed using the [column access functions]. ** sqlite4_step() is called again to retrieve the next row of data. ** ** ^[SQLITE_ERROR] means that a run-time error (such as a constraint ** violation) has occurred. sqlite4_step() should not be called again on ** the VM. More information may be found by calling [sqlite4_errmsg()]. | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 | ** is returned each time a new row of data is ready for processing by the ** caller. The values may be accessed using the [column access functions]. ** sqlite4_step() is called again to retrieve the next row of data. ** ** ^[SQLITE_ERROR] means that a run-time error (such as a constraint ** violation) has occurred. sqlite4_step() should not be called again on ** the VM. More information may be found by calling [sqlite4_errmsg()]. ** ** [SQLITE_MISUSE] means that the this routine was called inappropriately. ** Perhaps it was called on a [prepared statement] that has ** already been [sqlite4_finalize | finalized] or on one that had ** previously returned [SQLITE_ERROR] or [SQLITE_DONE]. Or it could ** be the case that the same database connection is being used by two or ** more threads at the same moment in time. */ SQLITE_API int sqlite4_step(sqlite4_stmt*); /* ** CAPIREF: Number of columns in a result set ** ** ^The sqlite4_data_count(P) interface returns the number of columns in the |
| ︙ | ︙ | |||
2733 2734 2735 2736 2737 2738 2739 |
** KEYWORDS: {column access functions}
**
** These routines form the "result set" interface.
**
** ^These routines return information about a single column of the current
** result row of a query. ^In every case the first argument is a pointer
** to the [prepared statement] that is being evaluated (the [sqlite4_stmt*]
| | | 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 |
** KEYWORDS: {column access functions}
**
** These routines form the "result set" interface.
**
** ^These routines return information about a single column of the current
** result row of a query. ^In every case the first argument is a pointer
** to the [prepared statement] that is being evaluated (the [sqlite4_stmt*]
** that was returned from [sqlite4_prepare()].
** and the second argument is the index of the column for which information
** should be returned. ^The leftmost column of the result set has the index 0.
** ^The number of columns in the result can be determined using
** [sqlite4_column_count()].
**
** If the SQL statement does not currently point to a valid row, or if the
** column index is out of range, the result is undefined.
|
| ︙ | ︙ | |||
3591 3592 3593 3594 3595 3596 3597 | /* ** CAPIREF: Find The Database Handle Of A Prepared Statement ** ** ^The sqlite4_db_handle interface returns the [database connection] handle ** to which a [prepared statement] belongs. ^The [database connection] ** returned by sqlite4_db_handle is the same [database connection] ** that was the first argument | | | 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 | /* ** CAPIREF: Find The Database Handle Of A Prepared Statement ** ** ^The sqlite4_db_handle interface returns the [database connection] handle ** to which a [prepared statement] belongs. ^The [database connection] ** returned by sqlite4_db_handle is the same [database connection] ** that was the first argument ** to the [sqlite4_prepare()] call (or its variants) that was used to ** create the statement in the first place. */ SQLITE_API sqlite4 *sqlite4_db_handle(sqlite4_stmt*); /* ** CAPIREF: Return The Filename For A Database Connection ** |
| ︙ | ︙ | |||
65151 65152 65153 65154 65155 65156 65157 |
for(i=iFirst; i<mx; i++){
sqlite4VdbeSetColName(pParse->pVdbe, i-iFirst, COLNAME_NAME,
azColName[i], SQLITE_STATIC);
}
}
#endif
| | | 65111 65112 65113 65114 65115 65116 65117 65118 65119 65120 65121 65122 65123 65124 65125 |
for(i=iFirst; i<mx; i++){
sqlite4VdbeSetColName(pParse->pVdbe, i-iFirst, COLNAME_NAME,
azColName[i], SQLITE_STATIC);
}
}
#endif
if( /*db->init.busy==0*/ 1 ){
Vdbe *pVdbe = pParse->pVdbe;
sqlite4VdbeSetSql(pVdbe, zSql, (int)(pParse->zTail-zSql));
}
if( pParse->pVdbe && (rc!=SQLITE_OK || db->mallocFailed) ){
sqlite4VdbeFinalize(pParse->pVdbe);
assert(!(*ppStmt));
}else{
|
| ︙ | ︙ |
Changes to src/sqlite4.h.
| ︙ | ︙ | |||
156 157 158 159 160 161 162 | ** ** See also: [sqlite4_libversion()], ** [sqlite4_libversion_number()], [sqlite4_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ #define SQLITE_VERSION "4.0.0" #define SQLITE_VERSION_NUMBER 4000000 | | | 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | ** ** See also: [sqlite4_libversion()], ** [sqlite4_libversion_number()], [sqlite4_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ #define SQLITE_VERSION "4.0.0" #define SQLITE_VERSION_NUMBER 4000000 #define SQLITE_SOURCE_ID "2012-06-27 13:56:22 bd2216554bbcf5eee88dc17d0d6ae165a7eddbe4" /* ** CAPIREF: Run-Time Library Version Numbers ** KEYWORDS: sqlite4_version, sqlite4_sourceid ** ** These interfaces provide the same information as the [SQLITE_VERSION], ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros |
| ︙ | ︙ | |||
249 250 251 252 253 254 255 |
** KEYWORDS: {database connection} {database connections}
**
** Each open SQLite database is represented by a pointer to an instance of
** the opaque structure named "sqlite4". It is useful to think of an sqlite4
** pointer as an object. The [sqlite4_open()]
** interface is its constructors, and [sqlite4_close()]
** is its destructor. There are many other interfaces (such as
| | | 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 |
** KEYWORDS: {database connection} {database connections}
**
** Each open SQLite database is represented by a pointer to an instance of
** the opaque structure named "sqlite4". It is useful to think of an sqlite4
** pointer as an object. The [sqlite4_open()]
** interface is its constructors, and [sqlite4_close()]
** is its destructor. There are many other interfaces (such as
** [sqlite4_prepare], [sqlite4_create_function()], and
** [sqlite4_busy_timeout()] to name but three) that are methods on an
** sqlite4 object.
*/
typedef struct sqlite4 sqlite4;
/*
** CAPIREF: 64-Bit Integer Types
|
| ︙ | ︙ | |||
336 337 338 339 340 341 342 | */ typedef int (*sqlite4_callback)(void*,int,char**, char**); /* ** CAPIREF: One-Step Query Execution Interface ** ** The sqlite4_exec() interface is a convenience wrapper around | | | 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 | */ typedef int (*sqlite4_callback)(void*,int,char**, char**); /* ** CAPIREF: One-Step Query Execution Interface ** ** The sqlite4_exec() interface is a convenience wrapper around ** [sqlite4_prepare()], [sqlite4_step()], and [sqlite4_finalize()], ** that allows an application to run multiple statements of SQL ** without having to use a lot of C code. ** ** ^The sqlite4_exec() interface runs zero or more UTF-8 encoded, ** semicolon-separate SQL statements passed into its 2nd argument, ** in the context of the [database connection] passed in as its 1st ** argument. ^If the callback function of the 3rd argument to |
| ︙ | ︙ | |||
1148 1149 1150 1151 1152 1153 1154 | /* ** CAPIREF: Compile-Time Authorization Callbacks ** ** ^This routine registers an authorizer callback with a particular ** [database connection], supplied in the first argument. ** ^The authorizer callback is invoked as SQL statements are being compiled | | | | | 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 | /* ** CAPIREF: Compile-Time Authorization Callbacks ** ** ^This routine registers an authorizer callback with a particular ** [database connection], supplied in the first argument. ** ^The authorizer callback is invoked as SQL statements are being compiled ** by [sqlite4_prepare()] or its variants [sqlite4_prepare()], ** [sqlite4_prepare16()] and [sqlite4_prepare16_v2()]. ^At various ** points during the compilation process, as logic is being created ** to perform various actions, the authorizer callback is invoked to ** see if those actions are allowed. ^The authorizer callback should ** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the ** specific action but allow the SQL statement to continue to be ** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be ** rejected with an error. ^If the authorizer callback returns ** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY] ** then the [sqlite4_prepare()] or equivalent call that triggered ** the authorizer will fail with an error message. ** ** When the callback returns [SQLITE_OK], that means the operation ** requested is ok. ^When the callback returns [SQLITE_DENY], the ** [sqlite4_prepare()] or equivalent call that triggered the ** authorizer will fail with an error message explaining that ** access is denied. ** ** ^The first parameter to the authorizer callback is a copy of the third ** parameter to the sqlite4_set_authorizer() interface. ^The second parameter ** to the callback is an integer [SQLITE_COPY | action code] that specifies ** the particular action to be authorized. ^The third through sixth parameters |
| ︙ | ︙ | |||
1208 1209 1210 1211 1212 1213 1214 | ** ^(Only a single authorizer can be in place on a database connection ** at a time. Each call to sqlite4_set_authorizer overrides the ** previous call.)^ ^Disable the authorizer by installing a NULL callback. ** The authorizer is disabled by default. ** ** The authorizer callback must not do anything that will modify ** the database connection that invoked the authorizer callback. | | | | | 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 | ** ^(Only a single authorizer can be in place on a database connection ** at a time. Each call to sqlite4_set_authorizer overrides the ** previous call.)^ ^Disable the authorizer by installing a NULL callback. ** The authorizer is disabled by default. ** ** The authorizer callback must not do anything that will modify ** the database connection that invoked the authorizer callback. ** Note that [sqlite4_prepare()] and [sqlite4_step()] both modify their ** database connections for the meaning of "modify" in this paragraph. ** ** ^When [sqlite4_prepare()] is used to prepare a statement, the ** statement might be re-prepared during [sqlite4_step()] due to a ** schema change. Hence, the application should ensure that the ** correct authorizer callback remains in place during the [sqlite4_step()]. ** ** ^Note that the authorizer callback is invoked only during ** [sqlite4_prepare()] or its variants. Authorization is not ** performed during statement evaluation in [sqlite4_step()], unless ** as stated in the previous paragraph, sqlite4_step() invokes ** sqlite4_prepare() to reprepare a statement after a schema change. */ SQLITE_API int sqlite4_set_authorizer( sqlite4*, int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), void *pUserData ); |
| ︙ | ︙ | |||
1352 1353 1354 1355 1356 1357 1358 | ** ** ^If the progress callback returns non-zero, the operation is ** interrupted. This feature can be used to implement a ** "Cancel" button on a GUI progress dialog box. ** ** The progress handler callback must not do anything that will modify ** the database connection that invoked the progress handler. | | | 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 | ** ** ^If the progress callback returns non-zero, the operation is ** interrupted. This feature can be used to implement a ** "Cancel" button on a GUI progress dialog box. ** ** The progress handler callback must not do anything that will modify ** the database connection that invoked the progress handler. ** Note that [sqlite4_prepare()] and [sqlite4_step()] both modify their ** database connections for the meaning of "modify" in this paragraph. ** */ SQLITE_API void sqlite4_progress_handler(sqlite4*, int, int(*)(void*), void*); /* ** CAPIREF: Opening A New Database Connection |
| ︙ | ︙ | |||
1469 1470 1471 1472 1473 1474 1475 | ** An instance of this object represents a single SQL statement. ** This object is variously known as a "prepared statement" or a ** "compiled SQL statement" or simply as a "statement". ** ** The life of a statement object goes something like this: ** ** <ol> | | | 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 | ** An instance of this object represents a single SQL statement. ** This object is variously known as a "prepared statement" or a ** "compiled SQL statement" or simply as a "statement". ** ** The life of a statement object goes something like this: ** ** <ol> ** <li> Create the object using [sqlite4_prepare()] or a related ** function. ** <li> Bind values to [host parameters] using the sqlite4_bind_*() ** interfaces. ** <li> Run the SQL by calling [sqlite4_step()] one or more times. ** <li> Reset the statement using [sqlite4_reset()] then go back ** to step 2. Do this zero or more times. ** <li> Destroy the object using [sqlite4_finalize()]. |
| ︙ | ︙ | |||
1601 1602 1603 1604 1605 1606 1607 | ** program using one of these routines. ** ** The first argument, "db", is a [database connection] obtained from a ** prior successful call to [sqlite4_open()]. ** The database connection must not have been closed. ** ** The second argument, "zSql", is the statement to be compiled, encoded | | | | | 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 | ** program using one of these routines. ** ** The first argument, "db", is a [database connection] obtained from a ** prior successful call to [sqlite4_open()]. ** The database connection must not have been closed. ** ** The second argument, "zSql", is the statement to be compiled, encoded ** as either UTF-8 or UTF-16. The sqlite4_prepare() ** interface uses UTF-8, and sqlite4_prepare16() ** uses UTF-16. ** ** ^If the nByte argument is less than zero, then zSql is read up to the ** first zero terminator. ^If nByte is non-negative, then it is the maximum ** number of bytes read from zSql. ^When nByte is non-negative, the ** zSql string ends at either the first '\000' or '\u0000' character or ** the nByte-th byte, whichever comes first. If the caller knows ** that the supplied string is nul-terminated, then there is a small |
| ︙ | ︙ | |||
1645 1646 1647 1648 1649 1650 1651 | ); /* ** CAPIREF: Retrieving Statement SQL ** ** ^This interface can be used to retrieve a saved copy of the original ** SQL text used to create a [prepared statement] if that statement was | | | 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 | ); /* ** CAPIREF: Retrieving Statement SQL ** ** ^This interface can be used to retrieve a saved copy of the original ** SQL text used to create a [prepared statement] if that statement was ** compiled using either [sqlite4_prepare()] or [sqlite4_prepare16_v2()]. */ SQLITE_API const char *sqlite4_sql(sqlite4_stmt *pStmt); /* ** CAPIREF: Determine If An SQL Statement Writes The Database ** ** ^The sqlite4_stmt_readonly(X) interface returns true (non-zero) if |
| ︙ | ︙ | |||
1757 1758 1759 1760 1761 1762 1763 |
typedef struct sqlite4_context sqlite4_context;
/*
** CAPIREF: Binding Values To Prepared Statements
** KEYWORDS: {host parameter} {host parameters} {host parameter name}
** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding}
**
| | | | 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 |
typedef struct sqlite4_context sqlite4_context;
/*
** CAPIREF: Binding Values To Prepared Statements
** KEYWORDS: {host parameter} {host parameters} {host parameter name}
** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding}
**
** ^(In the SQL statement text input to [sqlite4_prepare()] and its variants,
** literals may be replaced by a [parameter] that matches one of following
** templates:
**
** <ul>
** <li> ?
** <li> ?NNN
** <li> :VVV
** <li> @VVV
** <li> $VVV
** </ul>
**
** In the templates above, NNN represents an integer literal,
** and VVV represents an alphanumeric identifier.)^ ^The values of these
** parameters (also called "host parameter names" or "SQL parameters")
** can be set using the sqlite4_bind_*() routines defined here.
**
** ^The first argument to the sqlite4_bind_*() routines is always
** a pointer to the [sqlite4_stmt] object returned from
** [sqlite4_prepare()] or its variants.
**
** ^The second argument is the index of the SQL parameter to be set.
** ^The leftmost SQL parameter has an index of 1. ^When the same named
** SQL parameter is used more than once, second and subsequent
** occurrences have the same index as the first occurrence.
** ^The index for named parameters can be looked up using the
** [sqlite4_bind_parameter_index()] API if desired. ^The index
|
| ︙ | ︙ | |||
2050 2051 2052 2053 2054 2055 2056 | */ SQLITE_API const char *sqlite4_column_decltype(sqlite4_stmt*,int); SQLITE_API const void *sqlite4_column_decltype16(sqlite4_stmt*,int); /* ** CAPIREF: Evaluate An SQL Statement ** | | < < | < < < < < < < < < | | | 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 | */ SQLITE_API const char *sqlite4_column_decltype(sqlite4_stmt*,int); SQLITE_API const void *sqlite4_column_decltype16(sqlite4_stmt*,int); /* ** CAPIREF: Evaluate An SQL Statement ** ** After a [prepared statement] has been prepared using [sqlite4_prepare()], ** this function must be called one or more times to evaluate the statement. ** ** ^This routine can return any of the other [result codes] or ** [extended result codes]. ** ** ^[SQLITE_BUSY] means that the database engine was unable to acquire the ** database locks it needs to do its job. ^If the statement is a [COMMIT] ** or occurs outside of an explicit transaction, then you can retry the ** statement. If the statement is not a [COMMIT] and occurs within an ** explicit transaction then you should rollback the transaction before ** continuing. |
| ︙ | ︙ | |||
2087 2088 2089 2090 2091 2092 2093 | ** is returned each time a new row of data is ready for processing by the ** caller. The values may be accessed using the [column access functions]. ** sqlite4_step() is called again to retrieve the next row of data. ** ** ^[SQLITE_ERROR] means that a run-time error (such as a constraint ** violation) has occurred. sqlite4_step() should not be called again on ** the VM. More information may be found by calling [sqlite4_errmsg()]. | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 | ** is returned each time a new row of data is ready for processing by the ** caller. The values may be accessed using the [column access functions]. ** sqlite4_step() is called again to retrieve the next row of data. ** ** ^[SQLITE_ERROR] means that a run-time error (such as a constraint ** violation) has occurred. sqlite4_step() should not be called again on ** the VM. More information may be found by calling [sqlite4_errmsg()]. ** ** [SQLITE_MISUSE] means that the this routine was called inappropriately. ** Perhaps it was called on a [prepared statement] that has ** already been [sqlite4_finalize | finalized] or on one that had ** previously returned [SQLITE_ERROR] or [SQLITE_DONE]. Or it could ** be the case that the same database connection is being used by two or ** more threads at the same moment in time. */ SQLITE_API int sqlite4_step(sqlite4_stmt*); /* ** CAPIREF: Number of columns in a result set ** ** ^The sqlite4_data_count(P) interface returns the number of columns in the |
| ︙ | ︙ | |||
2177 2178 2179 2180 2181 2182 2183 |
** KEYWORDS: {column access functions}
**
** These routines form the "result set" interface.
**
** ^These routines return information about a single column of the current
** result row of a query. ^In every case the first argument is a pointer
** to the [prepared statement] that is being evaluated (the [sqlite4_stmt*]
| | | 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 |
** KEYWORDS: {column access functions}
**
** These routines form the "result set" interface.
**
** ^These routines return information about a single column of the current
** result row of a query. ^In every case the first argument is a pointer
** to the [prepared statement] that is being evaluated (the [sqlite4_stmt*]
** that was returned from [sqlite4_prepare()].
** and the second argument is the index of the column for which information
** should be returned. ^The leftmost column of the result set has the index 0.
** ^The number of columns in the result can be determined using
** [sqlite4_column_count()].
**
** If the SQL statement does not currently point to a valid row, or if the
** column index is out of range, the result is undefined.
|
| ︙ | ︙ | |||
3035 3036 3037 3038 3039 3040 3041 | /* ** CAPIREF: Find The Database Handle Of A Prepared Statement ** ** ^The sqlite4_db_handle interface returns the [database connection] handle ** to which a [prepared statement] belongs. ^The [database connection] ** returned by sqlite4_db_handle is the same [database connection] ** that was the first argument | | | 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 | /* ** CAPIREF: Find The Database Handle Of A Prepared Statement ** ** ^The sqlite4_db_handle interface returns the [database connection] handle ** to which a [prepared statement] belongs. ^The [database connection] ** returned by sqlite4_db_handle is the same [database connection] ** that was the first argument ** to the [sqlite4_prepare()] call (or its variants) that was used to ** create the statement in the first place. */ SQLITE_API sqlite4 *sqlite4_db_handle(sqlite4_stmt*); /* ** CAPIREF: Return The Filename For A Database Connection ** |
| ︙ | ︙ |
Changes to src/vfile.c.
| ︙ | ︙ | |||
88 89 90 91 92 93 94 |
}
db_begin_transaction();
p = manifest_get(vid, CFTYPE_MANIFEST);
if( p==0 ) return;
db_multi_exec("DELETE FROM vfile WHERE vid=%d", vid);
db_prepare(&ins,
| | > | | 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
}
db_begin_transaction();
p = manifest_get(vid, CFTYPE_MANIFEST);
if( p==0 ) return;
db_multi_exec("DELETE FROM vfile WHERE vid=%d", vid);
db_prepare(&ins,
"INSERT INTO vfile(id,vid,isexe,islink,rid,mrid,pathname) "
" VALUES(1+(SELECT coalesce(max(id),0) FROM vfile),"
":vid,:isexe,:islink,:id,:id,:name)");
db_prepare(&ridq, "SELECT rid,size FROM blob WHERE uuid=:uuid");
db_bind_int(&ins, ":vid", vid);
manifest_file_rewind(p);
while( (pFile = manifest_file_next(p,0))!=0 ){
if( pFile->zUuid==0 || uuid_is_shunned(pFile->zUuid) ) continue;
db_bind_text(&ridq, ":uuid", pFile->zUuid);
if( db_step(&ridq)==SQLITE_ROW ){
|
| ︙ | ︙ |