extralite-bundle 2.1 → 2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +1 -1
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +2 -2
- data/README.md +1 -1
- data/ext/extralite/common.c +3 -1
- data/ext/extralite/database.c +2 -0
- data/ext/extralite/extralite.h +3 -0
- data/ext/sqlite3/sqlite3.c +8785 -3803
- data/ext/sqlite3/sqlite3.h +240 -51
- data/lib/extralite/version.rb +1 -1
- data/lib/sequel/adapters/extralite.rb +5 -1
- data/test/test_database.rb +7 -0
- data/test/test_iterator.rb +13 -0
- metadata +6 -6
data/ext/sqlite3/sqlite3.h
CHANGED
@@ -146,9 +146,9 @@ extern "C" {
|
|
146
146
|
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
147
147
|
** [sqlite_version()] and [sqlite_source_id()].
|
148
148
|
*/
|
149
|
-
#define SQLITE_VERSION "3.
|
150
|
-
#define SQLITE_VERSION_NUMBER
|
151
|
-
#define SQLITE_SOURCE_ID "2023-
|
149
|
+
#define SQLITE_VERSION "3.44.0"
|
150
|
+
#define SQLITE_VERSION_NUMBER 3044000
|
151
|
+
#define SQLITE_SOURCE_ID "2023-11-01 11:23:50 17129ba1ff7f0daf37100ee82d507aef7827cf38de1866e2633096ae6ad81301"
|
152
152
|
|
153
153
|
/*
|
154
154
|
** CAPI3REF: Run-Time Library Version Numbers
|
@@ -528,6 +528,7 @@ SQLITE_API int sqlite3_exec(
|
|
528
528
|
#define SQLITE_IOERR_ROLLBACK_ATOMIC (SQLITE_IOERR | (31<<8))
|
529
529
|
#define SQLITE_IOERR_DATA (SQLITE_IOERR | (32<<8))
|
530
530
|
#define SQLITE_IOERR_CORRUPTFS (SQLITE_IOERR | (33<<8))
|
531
|
+
#define SQLITE_IOERR_IN_PAGE (SQLITE_IOERR | (34<<8))
|
531
532
|
#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
|
532
533
|
#define SQLITE_LOCKED_VTAB (SQLITE_LOCKED | (2<<8))
|
533
534
|
#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
|
@@ -1190,7 +1191,7 @@ struct sqlite3_io_methods {
|
|
1190
1191
|
** by clients within the current process, only within other processes.
|
1191
1192
|
**
|
1192
1193
|
** <li>[[SQLITE_FCNTL_CKSM_FILE]]
|
1193
|
-
** The [SQLITE_FCNTL_CKSM_FILE] opcode is for use
|
1194
|
+
** The [SQLITE_FCNTL_CKSM_FILE] opcode is for use internally by the
|
1194
1195
|
** [checksum VFS shim] only.
|
1195
1196
|
**
|
1196
1197
|
** <li>[[SQLITE_FCNTL_RESET_CACHE]]
|
@@ -2126,7 +2127,7 @@ struct sqlite3_mem_methods {
|
|
2126
2127
|
** is stored in each sorted record and the required column values loaded
|
2127
2128
|
** from the database as records are returned in sorted order. The default
|
2128
2129
|
** value for this option is to never use this optimization. Specifying a
|
2129
|
-
** negative value for this option restores the default
|
2130
|
+
** negative value for this option restores the default behavior.
|
2130
2131
|
** This option is only available if SQLite is compiled with the
|
2131
2132
|
** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option.
|
2132
2133
|
**
|
@@ -2301,7 +2302,7 @@ struct sqlite3_mem_methods {
|
|
2301
2302
|
** database handle, SQLite checks if this will mean that there are now no
|
2302
2303
|
** connections at all to the database. If so, it performs a checkpoint
|
2303
2304
|
** operation before closing the connection. This option may be used to
|
2304
|
-
** override this
|
2305
|
+
** override this behavior. The first parameter passed to this operation
|
2305
2306
|
** is an integer - positive to disable checkpoints-on-close, or zero (the
|
2306
2307
|
** default) to enable them, and negative to leave the setting unchanged.
|
2307
2308
|
** The second parameter is a pointer to an integer
|
@@ -2454,7 +2455,7 @@ struct sqlite3_mem_methods {
|
|
2454
2455
|
** the [VACUUM] command will fail with an obscure error when attempting to
|
2455
2456
|
** process a table with generated columns and a descending index. This is
|
2456
2457
|
** not considered a bug since SQLite versions 3.3.0 and earlier do not support
|
2457
|
-
** either generated columns or
|
2458
|
+
** either generated columns or descending indexes.
|
2458
2459
|
** </dd>
|
2459
2460
|
**
|
2460
2461
|
** [[SQLITE_DBCONFIG_STMT_SCANSTATUS]]
|
@@ -2735,6 +2736,7 @@ SQLITE_API sqlite3_int64 sqlite3_total_changes64(sqlite3*);
|
|
2735
2736
|
**
|
2736
2737
|
** ^The [sqlite3_is_interrupted(D)] interface can be used to determine whether
|
2737
2738
|
** or not an interrupt is currently in effect for [database connection] D.
|
2739
|
+
** It returns 1 if an interrupt is currently in effect, or 0 otherwise.
|
2738
2740
|
*/
|
2739
2741
|
SQLITE_API void sqlite3_interrupt(sqlite3*);
|
2740
2742
|
SQLITE_API int sqlite3_is_interrupted(sqlite3*);
|
@@ -3388,8 +3390,10 @@ SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*,
|
|
3388
3390
|
** M argument should be the bitwise OR-ed combination of
|
3389
3391
|
** zero or more [SQLITE_TRACE] constants.
|
3390
3392
|
**
|
3391
|
-
** ^Each call to either sqlite3_trace() or sqlite3_trace_v2()
|
3392
|
-
** (cancels)
|
3393
|
+
** ^Each call to either sqlite3_trace(D,X,P) or sqlite3_trace_v2(D,M,X,P)
|
3394
|
+
** overrides (cancels) all prior calls to sqlite3_trace(D,X,P) or
|
3395
|
+
** sqlite3_trace_v2(D,M,X,P) for the [database connection] D. Each
|
3396
|
+
** database connection may have at most one trace callback.
|
3393
3397
|
**
|
3394
3398
|
** ^The X callback is invoked whenever any of the events identified by
|
3395
3399
|
** mask M occur. ^The integer return value from the callback is currently
|
@@ -3758,7 +3762,7 @@ SQLITE_API int sqlite3_open_v2(
|
|
3758
3762
|
** as F) must be one of:
|
3759
3763
|
** <ul>
|
3760
3764
|
** <li> A database filename pointer created by the SQLite core and
|
3761
|
-
** passed into the xOpen() method of a VFS
|
3765
|
+
** passed into the xOpen() method of a VFS implementation, or
|
3762
3766
|
** <li> A filename obtained from [sqlite3_db_filename()], or
|
3763
3767
|
** <li> A new filename constructed using [sqlite3_create_filename()].
|
3764
3768
|
** </ul>
|
@@ -3871,7 +3875,7 @@ SQLITE_API sqlite3_file *sqlite3_database_file_object(const char*);
|
|
3871
3875
|
/*
|
3872
3876
|
** CAPI3REF: Create and Destroy VFS Filenames
|
3873
3877
|
**
|
3874
|
-
** These
|
3878
|
+
** These interfaces are provided for use by [VFS shim] implementations and
|
3875
3879
|
** are not useful outside of that context.
|
3876
3880
|
**
|
3877
3881
|
** The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of
|
@@ -3951,6 +3955,7 @@ SQLITE_API void sqlite3_free_filename(sqlite3_filename);
|
|
3951
3955
|
**
|
3952
3956
|
** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language
|
3953
3957
|
** text that describes the error, as either UTF-8 or UTF-16 respectively.
|
3958
|
+
** (See how SQLite handles [invalid UTF] for exceptions to this rule.)
|
3954
3959
|
** ^(Memory to hold the error message string is managed internally.
|
3955
3960
|
** The application does not need to worry about freeing the result.
|
3956
3961
|
** However, the error string might be overwritten or deallocated by
|
@@ -4418,6 +4423,41 @@ SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
|
|
4418
4423
|
*/
|
4419
4424
|
SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt);
|
4420
4425
|
|
4426
|
+
/*
|
4427
|
+
** CAPI3REF: Change The EXPLAIN Setting For A Prepared Statement
|
4428
|
+
** METHOD: sqlite3_stmt
|
4429
|
+
**
|
4430
|
+
** The sqlite3_stmt_explain(S,E) interface changes the EXPLAIN
|
4431
|
+
** setting for [prepared statement] S. If E is zero, then S becomes
|
4432
|
+
** a normal prepared statement. If E is 1, then S behaves as if
|
4433
|
+
** its SQL text began with "[EXPLAIN]". If E is 2, then S behaves as if
|
4434
|
+
** its SQL text began with "[EXPLAIN QUERY PLAN]".
|
4435
|
+
**
|
4436
|
+
** Calling sqlite3_stmt_explain(S,E) might cause S to be reprepared.
|
4437
|
+
** SQLite tries to avoid a reprepare, but a reprepare might be necessary
|
4438
|
+
** on the first transition into EXPLAIN or EXPLAIN QUERY PLAN mode.
|
4439
|
+
**
|
4440
|
+
** Because of the potential need to reprepare, a call to
|
4441
|
+
** sqlite3_stmt_explain(S,E) will fail with SQLITE_ERROR if S cannot be
|
4442
|
+
** reprepared because it was created using [sqlite3_prepare()] instead of
|
4443
|
+
** the newer [sqlite3_prepare_v2()] or [sqlite3_prepare_v3()] interfaces and
|
4444
|
+
** hence has no saved SQL text with which to reprepare.
|
4445
|
+
**
|
4446
|
+
** Changing the explain setting for a prepared statement does not change
|
4447
|
+
** the original SQL text for the statement. Hence, if the SQL text originally
|
4448
|
+
** began with EXPLAIN or EXPLAIN QUERY PLAN, but sqlite3_stmt_explain(S,0)
|
4449
|
+
** is called to convert the statement into an ordinary statement, the EXPLAIN
|
4450
|
+
** or EXPLAIN QUERY PLAN keywords will still appear in the sqlite3_sql(S)
|
4451
|
+
** output, even though the statement now acts like a normal SQL statement.
|
4452
|
+
**
|
4453
|
+
** This routine returns SQLITE_OK if the explain mode is successfully
|
4454
|
+
** changed, or an error code if the explain mode could not be changed.
|
4455
|
+
** The explain mode cannot be changed while a statement is active.
|
4456
|
+
** Hence, it is good practice to call [sqlite3_reset(S)]
|
4457
|
+
** immediately prior to calling sqlite3_stmt_explain(S,E).
|
4458
|
+
*/
|
4459
|
+
SQLITE_API int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode);
|
4460
|
+
|
4421
4461
|
/*
|
4422
4462
|
** CAPI3REF: Determine If A Prepared Statement Has Been Reset
|
4423
4463
|
** METHOD: sqlite3_stmt
|
@@ -4581,7 +4621,7 @@ typedef struct sqlite3_context sqlite3_context;
|
|
4581
4621
|
** with it may be passed. ^It is called to dispose of the BLOB or string even
|
4582
4622
|
** if the call to the bind API fails, except the destructor is not called if
|
4583
4623
|
** the third parameter is a NULL pointer or the fourth parameter is negative.
|
4584
|
-
** ^ (2) The special constant, [SQLITE_STATIC], may be
|
4624
|
+
** ^ (2) The special constant, [SQLITE_STATIC], may be passed to indicate that
|
4585
4625
|
** the application remains responsible for disposing of the object. ^In this
|
4586
4626
|
** case, the object and the provided pointer to it must remain valid until
|
4587
4627
|
** either the prepared statement is finalized or the same SQL parameter is
|
@@ -5260,20 +5300,33 @@ SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);
|
|
5260
5300
|
** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S
|
5261
5301
|
** back to the beginning of its program.
|
5262
5302
|
**
|
5263
|
-
** ^
|
5264
|
-
**
|
5265
|
-
**
|
5266
|
-
**
|
5303
|
+
** ^The return code from [sqlite3_reset(S)] indicates whether or not
|
5304
|
+
** the previous evaluation of prepared statement S completed successfully.
|
5305
|
+
** ^If [sqlite3_step(S)] has never before been called on S or if
|
5306
|
+
** [sqlite3_step(S)] has not been called since the previous call
|
5307
|
+
** to [sqlite3_reset(S)], then [sqlite3_reset(S)] will return
|
5308
|
+
** [SQLITE_OK].
|
5267
5309
|
**
|
5268
5310
|
** ^If the most recent call to [sqlite3_step(S)] for the
|
5269
5311
|
** [prepared statement] S indicated an error, then
|
5270
5312
|
** [sqlite3_reset(S)] returns an appropriate [error code].
|
5313
|
+
** ^The [sqlite3_reset(S)] interface might also return an [error code]
|
5314
|
+
** if there were no prior errors but the process of resetting
|
5315
|
+
** the prepared statement caused a new error. ^For example, if an
|
5316
|
+
** [INSERT] statement with a [RETURNING] clause is only stepped one time,
|
5317
|
+
** that one call to [sqlite3_step(S)] might return SQLITE_ROW but
|
5318
|
+
** the overall statement might still fail and the [sqlite3_reset(S)] call
|
5319
|
+
** might return SQLITE_BUSY if locking constraints prevent the
|
5320
|
+
** database change from committing. Therefore, it is important that
|
5321
|
+
** applications check the return code from [sqlite3_reset(S)] even if
|
5322
|
+
** no prior call to [sqlite3_step(S)] indicated a problem.
|
5271
5323
|
**
|
5272
5324
|
** ^The [sqlite3_reset(S)] interface does not change the values
|
5273
5325
|
** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S.
|
5274
5326
|
*/
|
5275
5327
|
SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
|
5276
5328
|
|
5329
|
+
|
5277
5330
|
/*
|
5278
5331
|
** CAPI3REF: Create Or Redefine SQL Functions
|
5279
5332
|
** KEYWORDS: {function creation routines}
|
@@ -5484,7 +5537,7 @@ SQLITE_API int sqlite3_create_window_function(
|
|
5484
5537
|
** [application-defined SQL function]
|
5485
5538
|
** that has side-effects or that could potentially leak sensitive information.
|
5486
5539
|
** This will prevent attacks in which an application is tricked
|
5487
|
-
** into using a database file that has had its schema
|
5540
|
+
** into using a database file that has had its schema surreptitiously
|
5488
5541
|
** modified to invoke the application-defined function in ways that are
|
5489
5542
|
** harmful.
|
5490
5543
|
** <p>
|
@@ -5828,32 +5881,32 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*);
|
|
5828
5881
|
** METHOD: sqlite3_context
|
5829
5882
|
**
|
5830
5883
|
** These functions may be used by (non-aggregate) SQL functions to
|
5831
|
-
** associate
|
5832
|
-
** multiple invocations of the same SQL function during
|
5833
|
-
** some circumstances the associated
|
5834
|
-
** of where this might be useful is in a
|
5835
|
-
** function. The compiled version of the regular
|
5836
|
-
**
|
5884
|
+
** associate auxiliary data with argument values. If the same argument
|
5885
|
+
** value is passed to multiple invocations of the same SQL function during
|
5886
|
+
** query execution, under some circumstances the associated auxiliary data
|
5887
|
+
** might be preserved. An example of where this might be useful is in a
|
5888
|
+
** regular-expression matching function. The compiled version of the regular
|
5889
|
+
** expression can be stored as auxiliary data associated with the pattern string.
|
5837
5890
|
** Then as long as the pattern string remains the same,
|
5838
5891
|
** the compiled regular expression can be reused on multiple
|
5839
5892
|
** invocations of the same function.
|
5840
5893
|
**
|
5841
|
-
** ^The sqlite3_get_auxdata(C,N) interface returns a pointer to the
|
5894
|
+
** ^The sqlite3_get_auxdata(C,N) interface returns a pointer to the auxiliary data
|
5842
5895
|
** associated by the sqlite3_set_auxdata(C,N,P,X) function with the Nth argument
|
5843
5896
|
** value to the application-defined function. ^N is zero for the left-most
|
5844
|
-
** function argument. ^If there is no
|
5897
|
+
** function argument. ^If there is no auxiliary data
|
5845
5898
|
** associated with the function argument, the sqlite3_get_auxdata(C,N) interface
|
5846
5899
|
** returns a NULL pointer.
|
5847
5900
|
**
|
5848
|
-
** ^The sqlite3_set_auxdata(C,N,P,X) interface saves P as
|
5849
|
-
** argument of the application-defined function. ^Subsequent
|
5901
|
+
** ^The sqlite3_set_auxdata(C,N,P,X) interface saves P as auxiliary data for the
|
5902
|
+
** N-th argument of the application-defined function. ^Subsequent
|
5850
5903
|
** calls to sqlite3_get_auxdata(C,N) return P from the most recent
|
5851
|
-
** sqlite3_set_auxdata(C,N,P,X) call if the
|
5852
|
-
** NULL if the
|
5904
|
+
** sqlite3_set_auxdata(C,N,P,X) call if the auxiliary data is still valid or
|
5905
|
+
** NULL if the auxiliary data has been discarded.
|
5853
5906
|
** ^After each call to sqlite3_set_auxdata(C,N,P,X) where X is not NULL,
|
5854
5907
|
** SQLite will invoke the destructor function X with parameter P exactly
|
5855
|
-
** once, when the
|
5856
|
-
** SQLite is free to discard the
|
5908
|
+
** once, when the auxiliary data is discarded.
|
5909
|
+
** SQLite is free to discard the auxiliary data at any time, including: <ul>
|
5857
5910
|
** <li> ^(when the corresponding function parameter changes)^, or
|
5858
5911
|
** <li> ^(when [sqlite3_reset()] or [sqlite3_finalize()] is called for the
|
5859
5912
|
** SQL statement)^, or
|
@@ -5869,7 +5922,7 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*);
|
|
5869
5922
|
** function implementation should not make any use of P after
|
5870
5923
|
** sqlite3_set_auxdata() has been called.
|
5871
5924
|
**
|
5872
|
-
** ^(In practice,
|
5925
|
+
** ^(In practice, auxiliary data is preserved between function calls for
|
5873
5926
|
** function parameters that are compile-time constants, including literal
|
5874
5927
|
** values and [parameters] and expressions composed from the same.)^
|
5875
5928
|
**
|
@@ -5879,10 +5932,67 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*);
|
|
5879
5932
|
**
|
5880
5933
|
** These routines must be called from the same thread in which
|
5881
5934
|
** the SQL function is running.
|
5935
|
+
**
|
5936
|
+
** See also: [sqlite3_get_clientdata()] and [sqlite3_set_clientdata()].
|
5882
5937
|
*/
|
5883
5938
|
SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N);
|
5884
5939
|
SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*));
|
5885
5940
|
|
5941
|
+
/*
|
5942
|
+
** CAPI3REF: Database Connection Client Data
|
5943
|
+
** METHOD: sqlite3
|
5944
|
+
**
|
5945
|
+
** These functions are used to associate one or more named pointers
|
5946
|
+
** with a [database connection].
|
5947
|
+
** A call to sqlite3_set_clientdata(D,N,P,X) causes the pointer P
|
5948
|
+
** to be attached to [database connection] D using name N. Subsequent
|
5949
|
+
** calls to sqlite3_get_clientdata(D,N) will return a copy of pointer P
|
5950
|
+
** or a NULL pointer if there were no prior calls to
|
5951
|
+
** sqlite3_set_clientdata() with the same values of D and N.
|
5952
|
+
** Names are compared using strcmp() and are thus case sensitive.
|
5953
|
+
**
|
5954
|
+
** If P and X are both non-NULL, then the destructor X is invoked with
|
5955
|
+
** argument P on the first of the following occurrences:
|
5956
|
+
** <ul>
|
5957
|
+
** <li> An out-of-memory error occurs during the call to
|
5958
|
+
** sqlite3_set_clientdata() which attempts to register pointer P.
|
5959
|
+
** <li> A subsequent call to sqlite3_set_clientdata(D,N,P,X) is made
|
5960
|
+
** with the same D and N parameters.
|
5961
|
+
** <li> The database connection closes. SQLite does not make any guarantees
|
5962
|
+
** about the order in which destructors are called, only that all
|
5963
|
+
** destructors will be called exactly once at some point during the
|
5964
|
+
** database connection closing process.
|
5965
|
+
** </ul>
|
5966
|
+
**
|
5967
|
+
** SQLite does not do anything with client data other than invoke
|
5968
|
+
** destructors on the client data at the appropriate time. The intended
|
5969
|
+
** use for client data is to provide a mechanism for wrapper libraries
|
5970
|
+
** to store additional information about an SQLite database connection.
|
5971
|
+
**
|
5972
|
+
** There is no limit (other than available memory) on the number of different
|
5973
|
+
** client data pointers (with different names) that can be attached to a
|
5974
|
+
** single database connection. However, the implementation is optimized
|
5975
|
+
** for the case of having only one or two different client data names.
|
5976
|
+
** Applications and wrapper libraries are discouraged from using more than
|
5977
|
+
** one client data name each.
|
5978
|
+
**
|
5979
|
+
** There is no way to enumerate the client data pointers
|
5980
|
+
** associated with a database connection. The N parameter can be thought
|
5981
|
+
** of as a secret key such that only code that knows the secret key is able
|
5982
|
+
** to access the associated data.
|
5983
|
+
**
|
5984
|
+
** Security Warning: These interfaces should not be exposed in scripting
|
5985
|
+
** languages or in other circumstances where it might be possible for an
|
5986
|
+
** an attacker to invoke them. Any agent that can invoke these interfaces
|
5987
|
+
** can probably also take control of the process.
|
5988
|
+
**
|
5989
|
+
** Database connection client data is only available for SQLite
|
5990
|
+
** version 3.44.0 ([dateof:3.44.0]) and later.
|
5991
|
+
**
|
5992
|
+
** See also: [sqlite3_set_auxdata()] and [sqlite3_get_auxdata()].
|
5993
|
+
*/
|
5994
|
+
SQLITE_API void *sqlite3_get_clientdata(sqlite3*,const char*);
|
5995
|
+
SQLITE_API int sqlite3_set_clientdata(sqlite3*, const char*, void*, void(*)(void*));
|
5886
5996
|
|
5887
5997
|
/*
|
5888
5998
|
** CAPI3REF: Constants Defining Special Destructor Behavior
|
@@ -6515,7 +6625,7 @@ SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName);
|
|
6515
6625
|
SQLITE_API int sqlite3_txn_state(sqlite3*,const char *zSchema);
|
6516
6626
|
|
6517
6627
|
/*
|
6518
|
-
** CAPI3REF: Allowed return values from
|
6628
|
+
** CAPI3REF: Allowed return values from sqlite3_txn_state()
|
6519
6629
|
** KEYWORDS: {transaction state}
|
6520
6630
|
**
|
6521
6631
|
** These constants define the current transaction state of a database file.
|
@@ -6647,7 +6757,7 @@ SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
|
|
6647
6757
|
** ^Each call to the sqlite3_autovacuum_pages() interface overrides all
|
6648
6758
|
** previous invocations for that database connection. ^If the callback
|
6649
6759
|
** argument (C) to sqlite3_autovacuum_pages(D,C,P,X) is a NULL pointer,
|
6650
|
-
** then the autovacuum steps callback is
|
6760
|
+
** then the autovacuum steps callback is canceled. The return value
|
6651
6761
|
** from sqlite3_autovacuum_pages() is normally SQLITE_OK, but might
|
6652
6762
|
** be some other error code if something goes wrong. The current
|
6653
6763
|
** implementation will only return SQLITE_OK or SQLITE_MISUSE, but other
|
@@ -7166,6 +7276,10 @@ struct sqlite3_module {
|
|
7166
7276
|
/* The methods above are in versions 1 and 2 of the sqlite_module object.
|
7167
7277
|
** Those below are for version 3 and greater. */
|
7168
7278
|
int (*xShadowName)(const char*);
|
7279
|
+
/* The methods above are in versions 1 through 3 of the sqlite_module object.
|
7280
|
+
** Those below are for version 4 and greater. */
|
7281
|
+
int (*xIntegrity)(sqlite3_vtab *pVTab, const char *zSchema,
|
7282
|
+
const char *zTabName, int mFlags, char **pzErr);
|
7169
7283
|
};
|
7170
7284
|
|
7171
7285
|
/*
|
@@ -7653,7 +7767,7 @@ SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
|
|
7653
7767
|
** code is returned and the transaction rolled back.
|
7654
7768
|
**
|
7655
7769
|
** Calling this function with an argument that is not a NULL pointer or an
|
7656
|
-
** open blob handle results in undefined
|
7770
|
+
** open blob handle results in undefined behavior. ^Calling this routine
|
7657
7771
|
** with a null pointer (such as would be returned by a failed call to
|
7658
7772
|
** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function
|
7659
7773
|
** is passed a valid open blob handle, the values returned by the
|
@@ -8133,6 +8247,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
|
|
8133
8247
|
#define SQLITE_TESTCTRL_PRNG_SAVE 5
|
8134
8248
|
#define SQLITE_TESTCTRL_PRNG_RESTORE 6
|
8135
8249
|
#define SQLITE_TESTCTRL_PRNG_RESET 7 /* NOT USED */
|
8250
|
+
#define SQLITE_TESTCTRL_FK_NO_ACTION 7
|
8136
8251
|
#define SQLITE_TESTCTRL_BITVEC_TEST 8
|
8137
8252
|
#define SQLITE_TESTCTRL_FAULT_INSTALL 9
|
8138
8253
|
#define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10
|
@@ -8161,7 +8276,8 @@ SQLITE_API int sqlite3_test_control(int op, ...);
|
|
8161
8276
|
#define SQLITE_TESTCTRL_TRACEFLAGS 31
|
8162
8277
|
#define SQLITE_TESTCTRL_TUNE 32
|
8163
8278
|
#define SQLITE_TESTCTRL_LOGEST 33
|
8164
|
-
#define
|
8279
|
+
#define SQLITE_TESTCTRL_USELONGDOUBLE 34
|
8280
|
+
#define SQLITE_TESTCTRL_LAST 34 /* Largest TESTCTRL */
|
8165
8281
|
|
8166
8282
|
/*
|
8167
8283
|
** CAPI3REF: SQL Keyword Checking
|
@@ -9617,7 +9733,7 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
|
|
9617
9733
|
** [[SQLITE_VTAB_DIRECTONLY]]<dt>SQLITE_VTAB_DIRECTONLY</dt>
|
9618
9734
|
** <dd>Calls of the form
|
9619
9735
|
** [sqlite3_vtab_config](db,SQLITE_VTAB_DIRECTONLY) from within the
|
9620
|
-
** the [xConnect] or [xCreate] methods of a [virtual table]
|
9736
|
+
** the [xConnect] or [xCreate] methods of a [virtual table] implementation
|
9621
9737
|
** prohibits that virtual table from being used from within triggers and
|
9622
9738
|
** views.
|
9623
9739
|
** </dd>
|
@@ -9807,7 +9923,7 @@ SQLITE_API int sqlite3_vtab_distinct(sqlite3_index_info*);
|
|
9807
9923
|
** communicated to the xBestIndex method as a
|
9808
9924
|
** [SQLITE_INDEX_CONSTRAINT_EQ] constraint.)^ If xBestIndex wants to use
|
9809
9925
|
** this constraint, it must set the corresponding
|
9810
|
-
** aConstraintUsage[].argvIndex to a
|
9926
|
+
** aConstraintUsage[].argvIndex to a positive integer. ^(Then, under
|
9811
9927
|
** the usual mode of handling IN operators, SQLite generates [bytecode]
|
9812
9928
|
** that invokes the [xFilter|xFilter() method] once for each value
|
9813
9929
|
** on the right-hand side of the IN operator.)^ Thus the virtual table
|
@@ -10236,7 +10352,7 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*);
|
|
10236
10352
|
** When the [sqlite3_blob_write()] API is used to update a blob column,
|
10237
10353
|
** the pre-update hook is invoked with SQLITE_DELETE. This is because the
|
10238
10354
|
** in this case the new values are not available. In this case, when a
|
10239
|
-
** callback made with op==SQLITE_DELETE is
|
10355
|
+
** callback made with op==SQLITE_DELETE is actually a write using the
|
10240
10356
|
** sqlite3_blob_write() API, the [sqlite3_preupdate_blobwrite()] returns
|
10241
10357
|
** the index of the column being written. In other cases, where the
|
10242
10358
|
** pre-update hook is being invoked for some other reason, including a
|
@@ -10497,6 +10613,13 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const c
|
|
10497
10613
|
** SQLITE_SERIALIZE_NOCOPY bit is set but no contiguous copy
|
10498
10614
|
** of the database exists.
|
10499
10615
|
**
|
10616
|
+
** After the call, if the SQLITE_SERIALIZE_NOCOPY bit had been set,
|
10617
|
+
** the returned buffer content will remain accessible and unchanged
|
10618
|
+
** until either the next write operation on the connection or when
|
10619
|
+
** the connection is closed, and applications must not modify the
|
10620
|
+
** buffer. If the bit had been clear, the returned buffer will not
|
10621
|
+
** be accessed by SQLite after the call.
|
10622
|
+
**
|
10500
10623
|
** A call to sqlite3_serialize(D,S,P,F) might return NULL even if the
|
10501
10624
|
** SQLITE_SERIALIZE_NOCOPY bit is omitted from argument F if a memory
|
10502
10625
|
** allocation error occurs.
|
@@ -10545,6 +10668,9 @@ SQLITE_API unsigned char *sqlite3_serialize(
|
|
10545
10668
|
** SQLite will try to increase the buffer size using sqlite3_realloc64()
|
10546
10669
|
** if writes on the database cause it to grow larger than M bytes.
|
10547
10670
|
**
|
10671
|
+
** Applications must not modify the buffer P or invalidate it before
|
10672
|
+
** the database connection D is closed.
|
10673
|
+
**
|
10548
10674
|
** The sqlite3_deserialize() interface will fail with SQLITE_BUSY if the
|
10549
10675
|
** database is currently in a read transaction or is involved in a backup
|
10550
10676
|
** operation.
|
@@ -10553,6 +10679,13 @@ SQLITE_API unsigned char *sqlite3_serialize(
|
|
10553
10679
|
** S argument to sqlite3_deserialize(D,S,P,N,M,F) is "temp" then the
|
10554
10680
|
** function returns SQLITE_ERROR.
|
10555
10681
|
**
|
10682
|
+
** The deserialized database should not be in [WAL mode]. If the database
|
10683
|
+
** is in WAL mode, then any attempt to use the database file will result
|
10684
|
+
** in an [SQLITE_CANTOPEN] error. The application can set the
|
10685
|
+
** [file format version numbers] (bytes 18 and 19) of the input database P
|
10686
|
+
** to 0x01 prior to invoking sqlite3_deserialize(D,S,P,N,M,F) to force the
|
10687
|
+
** database file into rollback mode and work around this limitation.
|
10688
|
+
**
|
10556
10689
|
** If sqlite3_deserialize(D,S,P,N,M,F) fails for any reason and if the
|
10557
10690
|
** SQLITE_DESERIALIZE_FREEONCLOSE bit is set in argument F, then
|
10558
10691
|
** [sqlite3_free()] is invoked on argument P prior to returning.
|
@@ -11625,6 +11758,18 @@ SQLITE_API int sqlite3changeset_concat(
|
|
11625
11758
|
);
|
11626
11759
|
|
11627
11760
|
|
11761
|
+
/*
|
11762
|
+
** CAPI3REF: Upgrade the Schema of a Changeset/Patchset
|
11763
|
+
*/
|
11764
|
+
SQLITE_API int sqlite3changeset_upgrade(
|
11765
|
+
sqlite3 *db,
|
11766
|
+
const char *zDb,
|
11767
|
+
int nIn, const void *pIn, /* Input changeset */
|
11768
|
+
int *pnOut, void **ppOut /* OUT: Inverse of input */
|
11769
|
+
);
|
11770
|
+
|
11771
|
+
|
11772
|
+
|
11628
11773
|
/*
|
11629
11774
|
** CAPI3REF: Changegroup Handle
|
11630
11775
|
**
|
@@ -11671,6 +11816,38 @@ typedef struct sqlite3_changegroup sqlite3_changegroup;
|
|
11671
11816
|
*/
|
11672
11817
|
SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp);
|
11673
11818
|
|
11819
|
+
/*
|
11820
|
+
** CAPI3REF: Add a Schema to a Changegroup
|
11821
|
+
** METHOD: sqlite3_changegroup_schema
|
11822
|
+
**
|
11823
|
+
** This method may be used to optionally enforce the rule that the changesets
|
11824
|
+
** added to the changegroup handle must match the schema of database zDb
|
11825
|
+
** ("main", "temp", or the name of an attached database). If
|
11826
|
+
** sqlite3changegroup_add() is called to add a changeset that is not compatible
|
11827
|
+
** with the configured schema, SQLITE_SCHEMA is returned and the changegroup
|
11828
|
+
** object is left in an undefined state.
|
11829
|
+
**
|
11830
|
+
** A changeset schema is considered compatible with the database schema in
|
11831
|
+
** the same way as for sqlite3changeset_apply(). Specifically, for each
|
11832
|
+
** table in the changeset, there exists a database table with:
|
11833
|
+
**
|
11834
|
+
** <ul>
|
11835
|
+
** <li> The name identified by the changeset, and
|
11836
|
+
** <li> at least as many columns as recorded in the changeset, and
|
11837
|
+
** <li> the primary key columns in the same position as recorded in
|
11838
|
+
** the changeset.
|
11839
|
+
** </ul>
|
11840
|
+
**
|
11841
|
+
** The output of the changegroup object always has the same schema as the
|
11842
|
+
** database nominated using this function. In cases where changesets passed
|
11843
|
+
** to sqlite3changegroup_add() have fewer columns than the corresponding table
|
11844
|
+
** in the database schema, these are filled in using the default column
|
11845
|
+
** values from the database schema. This makes it possible to combined
|
11846
|
+
** changesets that have different numbers of columns for a single table
|
11847
|
+
** within a changegroup, provided that they are otherwise compatible.
|
11848
|
+
*/
|
11849
|
+
SQLITE_API int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const char *zDb);
|
11850
|
+
|
11674
11851
|
/*
|
11675
11852
|
** CAPI3REF: Add A Changeset To A Changegroup
|
11676
11853
|
** METHOD: sqlite3_changegroup
|
@@ -11739,13 +11916,18 @@ SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp);
|
|
11739
11916
|
** If the new changeset contains changes to a table that is already present
|
11740
11917
|
** in the changegroup, then the number of columns and the position of the
|
11741
11918
|
** primary key columns for the table must be consistent. If this is not the
|
11742
|
-
** case, this function fails with SQLITE_SCHEMA.
|
11743
|
-
**
|
11744
|
-
**
|
11745
|
-
**
|
11746
|
-
**
|
11919
|
+
** case, this function fails with SQLITE_SCHEMA. Except, if the changegroup
|
11920
|
+
** object has been configured with a database schema using the
|
11921
|
+
** sqlite3changegroup_schema() API, then it is possible to combine changesets
|
11922
|
+
** with different numbers of columns for a single table, provided that
|
11923
|
+
** they are otherwise compatible.
|
11747
11924
|
**
|
11748
|
-
** If
|
11925
|
+
** If the input changeset appears to be corrupt and the corruption is
|
11926
|
+
** detected, SQLITE_CORRUPT is returned. Or, if an out-of-memory condition
|
11927
|
+
** occurs during processing, this function returns SQLITE_NOMEM.
|
11928
|
+
**
|
11929
|
+
** In all cases, if an error occurs the state of the final contents of the
|
11930
|
+
** changegroup is undefined. If no error occurs, SQLITE_OK is returned.
|
11749
11931
|
*/
|
11750
11932
|
SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData);
|
11751
11933
|
|
@@ -12010,10 +12192,17 @@ SQLITE_API int sqlite3changeset_apply_v2(
|
|
12010
12192
|
** <li>an insert change if all fields of the conflicting row match
|
12011
12193
|
** the row being inserted.
|
12012
12194
|
** </ul>
|
12195
|
+
**
|
12196
|
+
** <dt>SQLITE_CHANGESETAPPLY_FKNOACTION <dd>
|
12197
|
+
** If this flag it set, then all foreign key constraints in the target
|
12198
|
+
** database behave as if they were declared with "ON UPDATE NO ACTION ON
|
12199
|
+
** DELETE NO ACTION", even if they are actually CASCADE, RESTRICT, SET NULL
|
12200
|
+
** or SET DEFAULT.
|
12013
12201
|
*/
|
12014
12202
|
#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001
|
12015
12203
|
#define SQLITE_CHANGESETAPPLY_INVERT 0x0002
|
12016
12204
|
#define SQLITE_CHANGESETAPPLY_IGNORENOOP 0x0004
|
12205
|
+
#define SQLITE_CHANGESETAPPLY_FKNOACTION 0x0008
|
12017
12206
|
|
12018
12207
|
/*
|
12019
12208
|
** CAPI3REF: Constants Passed To The Conflict Handler
|
@@ -12754,7 +12943,7 @@ struct Fts5PhraseIter {
|
|
12754
12943
|
** See xPhraseFirstColumn above.
|
12755
12944
|
*/
|
12756
12945
|
struct Fts5ExtensionApi {
|
12757
|
-
int iVersion; /* Currently always set to
|
12946
|
+
int iVersion; /* Currently always set to 2 */
|
12758
12947
|
|
12759
12948
|
void *(*xUserData)(Fts5Context*);
|
12760
12949
|
|
@@ -12983,8 +13172,8 @@ struct Fts5ExtensionApi {
|
|
12983
13172
|
** as separate queries of the FTS index are required for each synonym.
|
12984
13173
|
**
|
12985
13174
|
** When using methods (2) or (3), it is important that the tokenizer only
|
12986
|
-
** provide synonyms when tokenizing document text (method (
|
12987
|
-
** text (method (
|
13175
|
+
** provide synonyms when tokenizing document text (method (3)) or query
|
13176
|
+
** text (method (2)), not both. Doing so will not cause any errors, but is
|
12988
13177
|
** inefficient.
|
12989
13178
|
*/
|
12990
13179
|
typedef struct Fts5Tokenizer Fts5Tokenizer;
|
@@ -13032,7 +13221,7 @@ struct fts5_api {
|
|
13032
13221
|
int (*xCreateTokenizer)(
|
13033
13222
|
fts5_api *pApi,
|
13034
13223
|
const char *zName,
|
13035
|
-
void *
|
13224
|
+
void *pUserData,
|
13036
13225
|
fts5_tokenizer *pTokenizer,
|
13037
13226
|
void (*xDestroy)(void*)
|
13038
13227
|
);
|
@@ -13041,7 +13230,7 @@ struct fts5_api {
|
|
13041
13230
|
int (*xFindTokenizer)(
|
13042
13231
|
fts5_api *pApi,
|
13043
13232
|
const char *zName,
|
13044
|
-
void **
|
13233
|
+
void **ppUserData,
|
13045
13234
|
fts5_tokenizer *pTokenizer
|
13046
13235
|
);
|
13047
13236
|
|
@@ -13049,7 +13238,7 @@ struct fts5_api {
|
|
13049
13238
|
int (*xCreateFunction)(
|
13050
13239
|
fts5_api *pApi,
|
13051
13240
|
const char *zName,
|
13052
|
-
void *
|
13241
|
+
void *pUserData,
|
13053
13242
|
fts5_extension_function xFunction,
|
13054
13243
|
void (*xDestroy)(void*)
|
13055
13244
|
);
|
data/lib/extralite/version.rb
CHANGED
@@ -212,7 +212,11 @@ module Sequel
|
|
212
212
|
case type
|
213
213
|
when :select
|
214
214
|
query = conn.prepare(sql, args)
|
215
|
-
|
215
|
+
begin
|
216
|
+
log_connection_yield(sql, conn, log_args){block.call(query.each, query.columns)}
|
217
|
+
ensure
|
218
|
+
query.reset
|
219
|
+
end
|
216
220
|
when :insert
|
217
221
|
log_connection_yield(sql, conn, log_args){conn.query(sql, args)}
|
218
222
|
conn.last_insert_rowid
|
data/test/test_database.rb
CHANGED
@@ -387,6 +387,13 @@ end
|
|
387
387
|
db = Extralite::Database.new(':memory:')
|
388
388
|
assert_match /^\#\<Extralite::Database:0x[0-9a-f]+ :memory:\>$/, db.inspect
|
389
389
|
end
|
390
|
+
|
391
|
+
def test_string_encoding
|
392
|
+
db = Extralite::Database.new(':memory:')
|
393
|
+
v = db.query_single_value("select 'foo'")
|
394
|
+
assert_equal 'foo', v
|
395
|
+
assert_equal 'UTF-8', v.encoding.name
|
396
|
+
end
|
390
397
|
end
|
391
398
|
|
392
399
|
class ScenarioTest < MiniTest::Test
|
data/test/test_iterator.rb
CHANGED
@@ -101,4 +101,17 @@ class IteratorTest < MiniTest::Test
|
|
101
101
|
i = @query.each_ary
|
102
102
|
assert_match /^\#\<Extralite::Iterator:0x[0-9a-f]+ ary\>$/, i.inspect
|
103
103
|
end
|
104
|
+
|
105
|
+
def test_return_from_block_issue_26
|
106
|
+
db = Extralite::Database.new('/tmp/locked.db')
|
107
|
+
|
108
|
+
λ = ->(sql) {
|
109
|
+
db.prepare(sql).each { |r| r.each { |_, v| return v } }
|
110
|
+
}
|
111
|
+
|
112
|
+
20.times do |i|
|
113
|
+
λ.('DROP TABLE IF EXISTS `test1`')
|
114
|
+
λ.('CREATE TABLE `test1` (`_id` integer NOT NULL PRIMARY KEY AUTOINCREMENT) STRICT')
|
115
|
+
end
|
116
|
+
end
|
104
117
|
end
|