better-sqlite3-multiple-ciphers 8.3.0 → 8.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,9 +31,9 @@
31
31
 
32
32
  #define SQLITE3MC_VERSION_MAJOR 1
33
33
  #define SQLITE3MC_VERSION_MINOR 6
34
- #define SQLITE3MC_VERSION_RELEASE 2
34
+ #define SQLITE3MC_VERSION_RELEASE 3
35
35
  #define SQLITE3MC_VERSION_SUBRELEASE 0
36
- #define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 1.6.2"
36
+ #define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 1.6.3"
37
37
 
38
38
  #endif /* SQLITE3MC_VERSION_H_ */
39
39
  /*** End of #include "sqlite3mc_version.h" ***/
@@ -192,9 +192,9 @@ extern "C" {
192
192
  ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
193
193
  ** [sqlite_version()] and [sqlite_source_id()].
194
194
  */
195
- #define SQLITE_VERSION "3.41.2"
196
- #define SQLITE_VERSION_NUMBER 3041002
197
- #define SQLITE_SOURCE_ID "2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69cffde2924203304e8ffc4155597af0c191da"
195
+ #define SQLITE_VERSION "3.42.0"
196
+ #define SQLITE_VERSION_NUMBER 3042000
197
+ #define SQLITE_SOURCE_ID "2023-05-16 12:36:15 831d0fb2836b71c9bc51067c49fee4b8f18047814f2ff22d817d25195cf350b0"
198
198
 
199
199
  /*
200
200
  ** CAPI3REF: Run-Time Library Version Numbers
@@ -1701,20 +1701,23 @@ SQLITE_API int sqlite3_os_end(void);
1701
1701
  ** must ensure that no other SQLite interfaces are invoked by other
1702
1702
  ** threads while sqlite3_config() is running.</b>
1703
1703
  **
1704
- ** The sqlite3_config() interface
1705
- ** may only be invoked prior to library initialization using
1706
- ** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()].
1707
- ** ^If sqlite3_config() is called after [sqlite3_initialize()] and before
1708
- ** [sqlite3_shutdown()] then it will return SQLITE_MISUSE.
1709
- ** Note, however, that ^sqlite3_config() can be called as part of the
1710
- ** implementation of an application-defined [sqlite3_os_init()].
1711
- **
1712
1704
  ** The first argument to sqlite3_config() is an integer
1713
1705
  ** [configuration option] that determines
1714
1706
  ** what property of SQLite is to be configured. Subsequent arguments
1715
1707
  ** vary depending on the [configuration option]
1716
1708
  ** in the first argument.
1717
1709
  **
1710
+ ** For most configuration options, the sqlite3_config() interface
1711
+ ** may only be invoked prior to library initialization using
1712
+ ** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()].
1713
+ ** The exceptional configuration options that may be invoked at any time
1714
+ ** are called "anytime configuration options".
1715
+ ** ^If sqlite3_config() is called after [sqlite3_initialize()] and before
1716
+ ** [sqlite3_shutdown()] with a first argument that is not an anytime
1717
+ ** configuration option, then the sqlite3_config() call will return SQLITE_MISUSE.
1718
+ ** Note, however, that ^sqlite3_config() can be called as part of the
1719
+ ** implementation of an application-defined [sqlite3_os_init()].
1720
+ **
1718
1721
  ** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK].
1719
1722
  ** ^If the option is unknown or SQLite is unable to set the option
1720
1723
  ** then this routine returns a non-zero [error code].
@@ -1822,6 +1825,23 @@ struct sqlite3_mem_methods {
1822
1825
  ** These constants are the available integer configuration options that
1823
1826
  ** can be passed as the first argument to the [sqlite3_config()] interface.
1824
1827
  **
1828
+ ** Most of the configuration options for sqlite3_config()
1829
+ ** will only work if invoked prior to [sqlite3_initialize()] or after
1830
+ ** [sqlite3_shutdown()]. The few exceptions to this rule are called
1831
+ ** "anytime configuration options".
1832
+ ** ^Calling [sqlite3_config()] with a first argument that is not an
1833
+ ** anytime configuration option in between calls to [sqlite3_initialize()] and
1834
+ ** [sqlite3_shutdown()] is a no-op that returns SQLITE_MISUSE.
1835
+ **
1836
+ ** The set of anytime configuration options can change (by insertions
1837
+ ** and/or deletions) from one release of SQLite to the next.
1838
+ ** As of SQLite version 3.42.0, the complete set of anytime configuration
1839
+ ** options is:
1840
+ ** <ul>
1841
+ ** <li> SQLITE_CONFIG_LOG
1842
+ ** <li> SQLITE_CONFIG_PCACHE_HDRSZ
1843
+ ** </ul>
1844
+ **
1825
1845
  ** New configuration options may be added in future releases of SQLite.
1826
1846
  ** Existing configuration options might be discontinued. Applications
1827
1847
  ** should check the return code from [sqlite3_config()] to make sure that
@@ -2168,28 +2188,28 @@ struct sqlite3_mem_methods {
2168
2188
  ** compile-time option is not set, then the default maximum is 1073741824.
2169
2189
  ** </dl>
2170
2190
  */
2171
- #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
2172
- #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
2173
- #define SQLITE_CONFIG_SERIALIZED 3 /* nil */
2174
- #define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
2175
- #define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */
2176
- #define SQLITE_CONFIG_SCRATCH 6 /* No longer used */
2177
- #define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */
2178
- #define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */
2179
- #define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */
2180
- #define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */
2181
- #define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */
2182
- /* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */
2183
- #define SQLITE_CONFIG_LOOKASIDE 13 /* int int */
2184
- #define SQLITE_CONFIG_PCACHE 14 /* no-op */
2185
- #define SQLITE_CONFIG_GETPCACHE 15 /* no-op */
2186
- #define SQLITE_CONFIG_LOG 16 /* xFunc, void* */
2187
- #define SQLITE_CONFIG_URI 17 /* int */
2188
- #define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */
2189
- #define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */
2191
+ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
2192
+ #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
2193
+ #define SQLITE_CONFIG_SERIALIZED 3 /* nil */
2194
+ #define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
2195
+ #define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */
2196
+ #define SQLITE_CONFIG_SCRATCH 6 /* No longer used */
2197
+ #define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */
2198
+ #define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */
2199
+ #define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */
2200
+ #define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */
2201
+ #define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */
2202
+ /* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */
2203
+ #define SQLITE_CONFIG_LOOKASIDE 13 /* int int */
2204
+ #define SQLITE_CONFIG_PCACHE 14 /* no-op */
2205
+ #define SQLITE_CONFIG_GETPCACHE 15 /* no-op */
2206
+ #define SQLITE_CONFIG_LOG 16 /* xFunc, void* */
2207
+ #define SQLITE_CONFIG_URI 17 /* int */
2208
+ #define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */
2209
+ #define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */
2190
2210
  #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */
2191
- #define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */
2192
- #define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */
2211
+ #define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */
2212
+ #define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */
2193
2213
  #define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */
2194
2214
  #define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */
2195
2215
  #define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */
@@ -2424,7 +2444,7 @@ struct sqlite3_mem_methods {
2424
2444
  ** </dd>
2425
2445
  **
2426
2446
  ** [[SQLITE_DBCONFIG_DQS_DML]]
2427
- ** <dt>SQLITE_DBCONFIG_DQS_DML</td>
2447
+ ** <dt>SQLITE_DBCONFIG_DQS_DML</dt>
2428
2448
  ** <dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates
2429
2449
  ** the legacy [double-quoted string literal] misfeature for DML statements
2430
2450
  ** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The
@@ -2433,7 +2453,7 @@ struct sqlite3_mem_methods {
2433
2453
  ** </dd>
2434
2454
  **
2435
2455
  ** [[SQLITE_DBCONFIG_DQS_DDL]]
2436
- ** <dt>SQLITE_DBCONFIG_DQS_DDL</td>
2456
+ ** <dt>SQLITE_DBCONFIG_DQS_DDL</dt>
2437
2457
  ** <dd>The SQLITE_DBCONFIG_DQS option activates or deactivates
2438
2458
  ** the legacy [double-quoted string literal] misfeature for DDL statements,
2439
2459
  ** such as CREATE TABLE and CREATE INDEX. The
@@ -2442,7 +2462,7 @@ struct sqlite3_mem_methods {
2442
2462
  ** </dd>
2443
2463
  **
2444
2464
  ** [[SQLITE_DBCONFIG_TRUSTED_SCHEMA]]
2445
- ** <dt>SQLITE_DBCONFIG_TRUSTED_SCHEMA</td>
2465
+ ** <dt>SQLITE_DBCONFIG_TRUSTED_SCHEMA</dt>
2446
2466
  ** <dd>The SQLITE_DBCONFIG_TRUSTED_SCHEMA option tells SQLite to
2447
2467
  ** assume that database schemas are untainted by malicious content.
2448
2468
  ** When the SQLITE_DBCONFIG_TRUSTED_SCHEMA option is disabled, SQLite
@@ -2462,7 +2482,7 @@ struct sqlite3_mem_methods {
2462
2482
  ** </dd>
2463
2483
  **
2464
2484
  ** [[SQLITE_DBCONFIG_LEGACY_FILE_FORMAT]]
2465
- ** <dt>SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</td>
2485
+ ** <dt>SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</dt>
2466
2486
  ** <dd>The SQLITE_DBCONFIG_LEGACY_FILE_FORMAT option activates or deactivates
2467
2487
  ** the legacy file format flag. When activated, this flag causes all newly
2468
2488
  ** created database file to have a schema format version number (the 4-byte
@@ -2471,7 +2491,7 @@ struct sqlite3_mem_methods {
2471
2491
  ** any SQLite version back to 3.0.0 ([dateof:3.0.0]). Without this setting,
2472
2492
  ** newly created databases are generally not understandable by SQLite versions
2473
2493
  ** prior to 3.3.0 ([dateof:3.3.0]). As these words are written, there
2474
- ** is now scarcely any need to generated database files that are compatible
2494
+ ** is now scarcely any need to generate database files that are compatible
2475
2495
  ** all the way back to version 3.0.0, and so this setting is of little
2476
2496
  ** practical use, but is provided so that SQLite can continue to claim the
2477
2497
  ** ability to generate new database files that are compatible with version
@@ -2482,6 +2502,38 @@ struct sqlite3_mem_methods {
2482
2502
  ** not considered a bug since SQLite versions 3.3.0 and earlier do not support
2483
2503
  ** either generated columns or decending indexes.
2484
2504
  ** </dd>
2505
+ **
2506
+ ** [[SQLITE_DBCONFIG_STMT_SCANSTATUS]]
2507
+ ** <dt>SQLITE_DBCONFIG_STMT_SCANSTATUS</dt>
2508
+ ** <dd>The SQLITE_DBCONFIG_STMT_SCANSTATUS option is only useful in
2509
+ ** SQLITE_ENABLE_STMT_SCANSTATUS builds. In this case, it sets or clears
2510
+ ** a flag that enables collection of the sqlite3_stmt_scanstatus_v2()
2511
+ ** statistics. For statistics to be collected, the flag must be set on
2512
+ ** the database handle both when the SQL statement is prepared and when it
2513
+ ** is stepped. The flag is set (collection of statistics is enabled)
2514
+ ** by default. This option takes two arguments: an integer and a pointer to
2515
+ ** an integer.. The first argument is 1, 0, or -1 to enable, disable, or
2516
+ ** leave unchanged the statement scanstatus option. If the second argument
2517
+ ** is not NULL, then the value of the statement scanstatus setting after
2518
+ ** processing the first argument is written into the integer that the second
2519
+ ** argument points to.
2520
+ ** </dd>
2521
+ **
2522
+ ** [[SQLITE_DBCONFIG_REVERSE_SCANORDER]]
2523
+ ** <dt>SQLITE_DBCONFIG_REVERSE_SCANORDER</dt>
2524
+ ** <dd>The SQLITE_DBCONFIG_REVERSE_SCANORDER option changes the default order
2525
+ ** in which tables and indexes are scanned so that the scans start at the end
2526
+ ** and work toward the beginning rather than starting at the beginning and
2527
+ ** working toward the end. Setting SQLITE_DBCONFIG_REVERSE_SCANORDER is the
2528
+ ** same as setting [PRAGMA reverse_unordered_selects]. This option takes
2529
+ ** two arguments which are an integer and a pointer to an integer. The first
2530
+ ** argument is 1, 0, or -1 to enable, disable, or leave unchanged the
2531
+ ** reverse scan order flag, respectively. If the second argument is not NULL,
2532
+ ** then 0 or 1 is written into the integer that the second argument points to
2533
+ ** depending on if the reverse scan order flag is set after processing the
2534
+ ** first argument.
2535
+ ** </dd>
2536
+ **
2485
2537
  ** </dl>
2486
2538
  */
2487
2539
  #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
@@ -2502,7 +2554,9 @@ struct sqlite3_mem_methods {
2502
2554
  #define SQLITE_DBCONFIG_ENABLE_VIEW 1015 /* int int* */
2503
2555
  #define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 /* int int* */
2504
2556
  #define SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 /* int int* */
2505
- #define SQLITE_DBCONFIG_MAX 1017 /* Largest DBCONFIG */
2557
+ #define SQLITE_DBCONFIG_STMT_SCANSTATUS 1018 /* int int* */
2558
+ #define SQLITE_DBCONFIG_REVERSE_SCANORDER 1019 /* int int* */
2559
+ #define SQLITE_DBCONFIG_MAX 1019 /* Largest DBCONFIG */
2506
2560
 
2507
2561
  /*
2508
2562
  ** CAPI3REF: Enable Or Disable Extended Result Codes
@@ -6247,6 +6301,13 @@ SQLITE_API void sqlite3_activate_cerod(
6247
6301
  ** of the default VFS is not implemented correctly, or not implemented at
6248
6302
  ** all, then the behavior of sqlite3_sleep() may deviate from the description
6249
6303
  ** in the previous paragraphs.
6304
+ **
6305
+ ** If a negative argument is passed to sqlite3_sleep() the results vary by
6306
+ ** VFS and operating system. Some system treat a negative argument as an
6307
+ ** instruction to sleep forever. Others understand it to mean do not sleep
6308
+ ** at all. ^In SQLite version 3.42.0 and later, a negative
6309
+ ** argument passed into sqlite3_sleep() is changed to zero before it is relayed
6310
+ ** down into the xSleep method of the VFS.
6250
6311
  */
6251
6312
  SQLITE_API int sqlite3_sleep(int);
6252
6313
 
@@ -7874,9 +7935,9 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*);
7874
7935
  ** is undefined if the mutex is not currently entered by the
7875
7936
  ** calling thread or is not currently allocated.
7876
7937
  **
7877
- ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
7878
- ** sqlite3_mutex_leave() is a NULL pointer, then all three routines
7879
- ** behave as no-ops.
7938
+ ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(),
7939
+ ** sqlite3_mutex_leave(), or sqlite3_mutex_free() is a NULL pointer,
7940
+ ** then any of the four routines behaves as a no-op.
7880
7941
  **
7881
7942
  ** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()].
7882
7943
  */
@@ -9610,18 +9671,28 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
9610
9671
  ** [[SQLITE_VTAB_INNOCUOUS]]<dt>SQLITE_VTAB_INNOCUOUS</dt>
9611
9672
  ** <dd>Calls of the form
9612
9673
  ** [sqlite3_vtab_config](db,SQLITE_VTAB_INNOCUOUS) from within the
9613
- ** the [xConnect] or [xCreate] methods of a [virtual table] implmentation
9674
+ ** the [xConnect] or [xCreate] methods of a [virtual table] implementation
9614
9675
  ** identify that virtual table as being safe to use from within triggers
9615
9676
  ** and views. Conceptually, the SQLITE_VTAB_INNOCUOUS tag means that the
9616
9677
  ** virtual table can do no serious harm even if it is controlled by a
9617
9678
  ** malicious hacker. Developers should avoid setting the SQLITE_VTAB_INNOCUOUS
9618
9679
  ** flag unless absolutely necessary.
9619
9680
  ** </dd>
9681
+ **
9682
+ ** [[SQLITE_VTAB_USES_ALL_SCHEMAS]]<dt>SQLITE_VTAB_USES_ALL_SCHEMAS</dt>
9683
+ ** <dd>Calls of the form
9684
+ ** [sqlite3_vtab_config](db,SQLITE_VTAB_USES_ALL_SCHEMA) from within the
9685
+ ** the [xConnect] or [xCreate] methods of a [virtual table] implementation
9686
+ ** instruct the query planner to begin at least a read transaction on
9687
+ ** all schemas ("main", "temp", and any ATTACH-ed databases) whenever the
9688
+ ** virtual table is used.
9689
+ ** </dd>
9620
9690
  ** </dl>
9621
9691
  */
9622
9692
  #define SQLITE_VTAB_CONSTRAINT_SUPPORT 1
9623
9693
  #define SQLITE_VTAB_INNOCUOUS 2
9624
9694
  #define SQLITE_VTAB_DIRECTONLY 3
9695
+ #define SQLITE_VTAB_USES_ALL_SCHEMAS 4
9625
9696
 
9626
9697
  /*
9627
9698
  ** CAPI3REF: Determine The Virtual Table Conflict Policy
@@ -10796,16 +10867,20 @@ SQLITE_API int sqlite3session_create(
10796
10867
  SQLITE_API void sqlite3session_delete(sqlite3_session *pSession);
10797
10868
 
10798
10869
  /*
10799
- ** CAPIREF: Conigure a Session Object
10870
+ ** CAPI3REF: Configure a Session Object
10800
10871
  ** METHOD: sqlite3_session
10801
10872
  **
10802
10873
  ** This method is used to configure a session object after it has been
10803
- ** created. At present the only valid value for the second parameter is
10804
- ** [SQLITE_SESSION_OBJCONFIG_SIZE].
10874
+ ** created. At present the only valid values for the second parameter are
10875
+ ** [SQLITE_SESSION_OBJCONFIG_SIZE] and [SQLITE_SESSION_OBJCONFIG_ROWID].
10805
10876
  **
10806
- ** Arguments for sqlite3session_object_config()
10877
+ */
10878
+ SQLITE_API int sqlite3session_object_config(sqlite3_session*, int op, void *pArg);
10879
+
10880
+ /*
10881
+ ** CAPI3REF: Options for sqlite3session_object_config
10807
10882
  **
10808
- ** The following values may passed as the the 4th parameter to
10883
+ ** The following values may passed as the the 2nd parameter to
10809
10884
  ** sqlite3session_object_config().
10810
10885
  **
10811
10886
  ** <dt>SQLITE_SESSION_OBJCONFIG_SIZE <dd>
@@ -10821,12 +10896,21 @@ SQLITE_API void sqlite3session_delete(sqlite3_session *pSession);
10821
10896
  **
10822
10897
  ** It is an error (SQLITE_MISUSE) to attempt to modify this setting after
10823
10898
  ** the first table has been attached to the session object.
10899
+ **
10900
+ ** <dt>SQLITE_SESSION_OBJCONFIG_ROWID <dd>
10901
+ ** This option is used to set, clear or query the flag that enables
10902
+ ** collection of data for tables with no explicit PRIMARY KEY.
10903
+ **
10904
+ ** Normally, tables with no explicit PRIMARY KEY are simply ignored
10905
+ ** by the sessions module. However, if this flag is set, it behaves
10906
+ ** as if such tables have a column "_rowid_ INTEGER PRIMARY KEY" inserted
10907
+ ** as their leftmost columns.
10908
+ **
10909
+ ** It is an error (SQLITE_MISUSE) to attempt to modify this setting after
10910
+ ** the first table has been attached to the session object.
10824
10911
  */
10825
- SQLITE_API int sqlite3session_object_config(sqlite3_session*, int op, void *pArg);
10826
-
10827
- /*
10828
- */
10829
- #define SQLITE_SESSION_OBJCONFIG_SIZE 1
10912
+ #define SQLITE_SESSION_OBJCONFIG_SIZE 1
10913
+ #define SQLITE_SESSION_OBJCONFIG_ROWID 2
10830
10914
 
10831
10915
  /*
10832
10916
  ** CAPI3REF: Enable Or Disable A Session Object
@@ -11959,9 +12043,23 @@ SQLITE_API int sqlite3changeset_apply_v2(
11959
12043
  ** Invert the changeset before applying it. This is equivalent to inverting
11960
12044
  ** a changeset using sqlite3changeset_invert() before applying it. It is
11961
12045
  ** an error to specify this flag with a patchset.
12046
+ **
12047
+ ** <dt>SQLITE_CHANGESETAPPLY_IGNORENOOP <dd>
12048
+ ** Do not invoke the conflict handler callback for any changes that
12049
+ ** would not actually modify the database even if they were applied.
12050
+ ** Specifically, this means that the conflict handler is not invoked
12051
+ ** for:
12052
+ ** <ul>
12053
+ ** <li>a delete change if the row being deleted cannot be found,
12054
+ ** <li>an update change if the modified fields are already set to
12055
+ ** their new values in the conflicting row, or
12056
+ ** <li>an insert change if all fields of the conflicting row match
12057
+ ** the row being inserted.
12058
+ ** </ul>
11962
12059
  */
11963
12060
  #define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001
11964
12061
  #define SQLITE_CHANGESETAPPLY_INVERT 0x0002
12062
+ #define SQLITE_CHANGESETAPPLY_IGNORENOOP 0x0004
11965
12063
 
11966
12064
  /*
11967
12065
  ** CAPI3REF: Constants Passed To The Conflict Handler
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "better-sqlite3-multiple-ciphers",
3
- "version": "8.3.0",
3
+ "version": "8.4.0",
4
4
  "description": "better-sqlite3 with multiple-cipher encryption support",
5
5
  "homepage": "https://github.com/m4heshd/better-sqlite3-multiple-ciphers",
6
6
  "author": "Mahesh Bandara Wijerathna (m4heshd) <m4heshd@gmail.com>",
@@ -903,20 +903,27 @@ void Statement::JS_new (v8::FunctionCallbackInfo <v8 :: Value> const & info)
903
903
  if (handle == NULL) {
904
904
  return ThrowRangeError("The supplied SQL string contains no statements");
905
905
  }
906
- for (char c; (c = *tail); ++tail) {
907
- if (IS_SKIPPED(c)) continue;
906
+
907
+ for (char c; (c = *tail); ) {
908
+ if (IS_SKIPPED(c)) {
909
+ ++tail;
910
+ continue;
911
+ }
908
912
  if (c == '/' && tail[1] == '*') {
909
913
  tail += 2;
910
914
  for (char c; (c = *tail); ++tail) {
911
915
  if (c == '*' && tail[1] == '/') {
912
- tail += 1;
916
+ tail += 2;
913
917
  break;
914
918
  }
915
919
  }
916
920
  } else if (c == '-' && tail[1] == '-') {
917
921
  tail += 2;
918
922
  for (char c; (c = *tail); ++tail) {
919
- if (c == '\n') break;
923
+ if (c == '\n') {
924
+ ++tail;
925
+ break;
926
+ }
920
927
  }
921
928
  } else {
922
929
  sqlite3_finalize(handle);
@@ -935,9 +942,9 @@ void Statement::JS_new (v8::FunctionCallbackInfo <v8 :: Value> const & info)
935
942
 
936
943
  info.GetReturnValue().Set(info.This());
937
944
  }
938
- #line 149 "./src/objects/statement.lzz"
945
+ #line 156 "./src/objects/statement.lzz"
939
946
  void Statement::JS_run (v8::FunctionCallbackInfo <v8 :: Value> const & info)
940
- #line 149 "./src/objects/statement.lzz"
947
+ #line 156 "./src/objects/statement.lzz"
941
948
  {
942
949
  Statement * stmt = node :: ObjectWrap :: Unwrap < Statement > ( info . This ( ) ) ; ( ( void ) 0 ) ; sqlite3_stmt * handle = stmt -> handle ; Database * db = stmt -> db ; if ( ! db -> GetState ( ) -> open ) return ThrowTypeError ( "The database connection is not open" ) ; if ( db -> GetState ( ) -> busy ) return ThrowTypeError ( "This database connection is busy executing a query" ) ; if ( stmt -> locked ) return ThrowTypeError ( "This statement is busy executing a query" ) ; if ( ! db -> GetState ( ) -> unsafe_mode ) { if ( db -> GetState ( ) -> iterators ) return ThrowTypeError ( "This database connection is busy executing a query" ) ; } ( ( void ) 0 ) ; const bool bound = stmt -> bound ; if ( ! bound ) { Binder binder ( handle ) ; if ( ! binder . Bind ( info , info . Length ( ) , stmt ) ) { sqlite3_clear_bindings ( handle ) ; return ; } ( ( void ) 0 ) ; } else if ( info . Length ( ) > 0 ) { return ThrowTypeError ( "This statement already has bound parameters" ) ; } ( ( void ) 0 ) ; db -> GetState ( ) -> busy = true ; v8 :: Isolate * isolate = info . GetIsolate ( ) ; if ( db -> Log ( isolate , handle ) ) { db -> GetState ( ) -> busy = false ; db -> ThrowDatabaseError ( ) ; if ( ! bound ) { sqlite3_clear_bindings ( handle ) ; } return ; } ( ( void ) 0 ) ;
943
950
  sqlite3* db_handle = db->GetHandle();
@@ -960,9 +967,9 @@ void Statement::JS_run (v8::FunctionCallbackInfo <v8 :: Value> const & info)
960
967
  }
961
968
  db -> GetState ( ) -> busy = false ; db -> ThrowDatabaseError ( ) ; if ( ! bound ) { sqlite3_clear_bindings ( handle ) ; } return ;
962
969
  }
963
- #line 172 "./src/objects/statement.lzz"
970
+ #line 179 "./src/objects/statement.lzz"
964
971
  void Statement::JS_get (v8::FunctionCallbackInfo <v8 :: Value> const & info)
965
- #line 172 "./src/objects/statement.lzz"
972
+ #line 179 "./src/objects/statement.lzz"
966
973
  {
967
974
  Statement * stmt = node :: ObjectWrap :: Unwrap < Statement > ( info . This ( ) ) ; if ( ! stmt -> returns_data ) return ThrowTypeError ( "This statement does not return data. Use run() instead" ) ; sqlite3_stmt * handle = stmt -> handle ; Database * db = stmt -> db ; if ( ! db -> GetState ( ) -> open ) return ThrowTypeError ( "The database connection is not open" ) ; if ( db -> GetState ( ) -> busy ) return ThrowTypeError ( "This database connection is busy executing a query" ) ; if ( stmt -> locked ) return ThrowTypeError ( "This statement is busy executing a query" ) ; const bool bound = stmt -> bound ; if ( ! bound ) { Binder binder ( handle ) ; if ( ! binder . Bind ( info , info . Length ( ) , stmt ) ) { sqlite3_clear_bindings ( handle ) ; return ; } ( ( void ) 0 ) ; } else if ( info . Length ( ) > 0 ) { return ThrowTypeError ( "This statement already has bound parameters" ) ; } ( ( void ) 0 ) ; db -> GetState ( ) -> busy = true ; v8 :: Isolate * isolate = info . GetIsolate ( ) ; if ( db -> Log ( isolate , handle ) ) { db -> GetState ( ) -> busy = false ; db -> ThrowDatabaseError ( ) ; if ( ! bound ) { sqlite3_clear_bindings ( handle ) ; } return ; } ( ( void ) 0 ) ;
968
975
  int status = sqlite3_step(handle);
@@ -977,9 +984,9 @@ void Statement::JS_get (v8::FunctionCallbackInfo <v8 :: Value> const & info)
977
984
  sqlite3_reset(handle);
978
985
  db -> GetState ( ) -> busy = false ; db -> ThrowDatabaseError ( ) ; if ( ! bound ) { sqlite3_clear_bindings ( handle ) ; } return ;
979
986
  }
980
- #line 187 "./src/objects/statement.lzz"
987
+ #line 194 "./src/objects/statement.lzz"
981
988
  void Statement::JS_all (v8::FunctionCallbackInfo <v8 :: Value> const & info)
982
- #line 187 "./src/objects/statement.lzz"
989
+ #line 194 "./src/objects/statement.lzz"
983
990
  {
984
991
  Statement * stmt = node :: ObjectWrap :: Unwrap < Statement > ( info . This ( ) ) ; if ( ! stmt -> returns_data ) return ThrowTypeError ( "This statement does not return data. Use run() instead" ) ; sqlite3_stmt * handle = stmt -> handle ; Database * db = stmt -> db ; if ( ! db -> GetState ( ) -> open ) return ThrowTypeError ( "The database connection is not open" ) ; if ( db -> GetState ( ) -> busy ) return ThrowTypeError ( "This database connection is busy executing a query" ) ; if ( stmt -> locked ) return ThrowTypeError ( "This statement is busy executing a query" ) ; const bool bound = stmt -> bound ; if ( ! bound ) { Binder binder ( handle ) ; if ( ! binder . Bind ( info , info . Length ( ) , stmt ) ) { sqlite3_clear_bindings ( handle ) ; return ; } ( ( void ) 0 ) ; } else if ( info . Length ( ) > 0 ) { return ThrowTypeError ( "This statement already has bound parameters" ) ; } ( ( void ) 0 ) ; db -> GetState ( ) -> busy = true ; v8 :: Isolate * isolate = info . GetIsolate ( ) ; if ( db -> Log ( isolate , handle ) ) { db -> GetState ( ) -> busy = false ; db -> ThrowDatabaseError ( ) ; if ( ! bound ) { sqlite3_clear_bindings ( handle ) ; } return ; } ( ( void ) 0 ) ;
985
992
  v8 :: Local < v8 :: Context > ctx = isolate -> GetCurrentContext ( ) ;
@@ -1000,9 +1007,9 @@ void Statement::JS_all (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1000
1007
  if (js_error) db->GetState()->was_js_error = true;
1001
1008
  db -> GetState ( ) -> busy = false ; db -> ThrowDatabaseError ( ) ; if ( ! bound ) { sqlite3_clear_bindings ( handle ) ; } return ;
1002
1009
  }
1003
- #line 208 "./src/objects/statement.lzz"
1010
+ #line 215 "./src/objects/statement.lzz"
1004
1011
  void Statement::JS_iterate (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1005
- #line 208 "./src/objects/statement.lzz"
1012
+ #line 215 "./src/objects/statement.lzz"
1006
1013
  {
1007
1014
  Addon * addon = static_cast < Addon * > ( info . Data ( ) . As < v8 :: External > ( ) -> Value ( ) ) ;
1008
1015
  v8 :: Isolate * isolate = info . GetIsolate ( ) ;
@@ -1012,9 +1019,9 @@ void Statement::JS_iterate (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1012
1019
  addon->privileged_info = NULL;
1013
1020
  if (!maybeIterator.IsEmpty()) info.GetReturnValue().Set(maybeIterator.ToLocalChecked());
1014
1021
  }
1015
- #line 218 "./src/objects/statement.lzz"
1022
+ #line 225 "./src/objects/statement.lzz"
1016
1023
  void Statement::JS_bind (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1017
- #line 218 "./src/objects/statement.lzz"
1024
+ #line 225 "./src/objects/statement.lzz"
1018
1025
  {
1019
1026
  Statement* stmt = node :: ObjectWrap :: Unwrap <Statement>(info.This());
1020
1027
  if (stmt->bound) return ThrowTypeError("The bind() method can only be invoked once per statement object");
@@ -1025,9 +1032,9 @@ void Statement::JS_bind (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1025
1032
  stmt->bound = true;
1026
1033
  info.GetReturnValue().Set(info.This());
1027
1034
  }
1028
- #line 229 "./src/objects/statement.lzz"
1035
+ #line 236 "./src/objects/statement.lzz"
1029
1036
  void Statement::JS_pluck (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1030
- #line 229 "./src/objects/statement.lzz"
1037
+ #line 236 "./src/objects/statement.lzz"
1031
1038
  {
1032
1039
  Statement* stmt = node :: ObjectWrap :: Unwrap <Statement>(info.This());
1033
1040
  if (!stmt->returns_data) return ThrowTypeError("The pluck() method is only for statements that return data");
@@ -1038,9 +1045,9 @@ void Statement::JS_pluck (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1038
1045
  stmt->mode = use ? Data::PLUCK : stmt->mode == Data::PLUCK ? Data::FLAT : stmt->mode;
1039
1046
  info.GetReturnValue().Set(info.This());
1040
1047
  }
1041
- #line 240 "./src/objects/statement.lzz"
1048
+ #line 247 "./src/objects/statement.lzz"
1042
1049
  void Statement::JS_expand (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1043
- #line 240 "./src/objects/statement.lzz"
1050
+ #line 247 "./src/objects/statement.lzz"
1044
1051
  {
1045
1052
  Statement* stmt = node :: ObjectWrap :: Unwrap <Statement>(info.This());
1046
1053
  if (!stmt->returns_data) return ThrowTypeError("The expand() method is only for statements that return data");
@@ -1051,9 +1058,9 @@ void Statement::JS_expand (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1051
1058
  stmt->mode = use ? Data::EXPAND : stmt->mode == Data::EXPAND ? Data::FLAT : stmt->mode;
1052
1059
  info.GetReturnValue().Set(info.This());
1053
1060
  }
1054
- #line 251 "./src/objects/statement.lzz"
1061
+ #line 258 "./src/objects/statement.lzz"
1055
1062
  void Statement::JS_raw (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1056
- #line 251 "./src/objects/statement.lzz"
1063
+ #line 258 "./src/objects/statement.lzz"
1057
1064
  {
1058
1065
  Statement* stmt = node :: ObjectWrap :: Unwrap <Statement>(info.This());
1059
1066
  if (!stmt->returns_data) return ThrowTypeError("The raw() method is only for statements that return data");
@@ -1064,9 +1071,9 @@ void Statement::JS_raw (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1064
1071
  stmt->mode = use ? Data::RAW : stmt->mode == Data::RAW ? Data::FLAT : stmt->mode;
1065
1072
  info.GetReturnValue().Set(info.This());
1066
1073
  }
1067
- #line 262 "./src/objects/statement.lzz"
1074
+ #line 269 "./src/objects/statement.lzz"
1068
1075
  void Statement::JS_safeIntegers (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1069
- #line 262 "./src/objects/statement.lzz"
1076
+ #line 269 "./src/objects/statement.lzz"
1070
1077
  {
1071
1078
  Statement* stmt = node :: ObjectWrap :: Unwrap <Statement>(info.This());
1072
1079
  if ( stmt -> db -> GetState ( ) -> busy ) return ThrowTypeError ( "This database connection is busy executing a query" ) ;
@@ -1075,9 +1082,9 @@ void Statement::JS_safeIntegers (v8::FunctionCallbackInfo <v8 :: Value> const &
1075
1082
  else { if ( info . Length ( ) <= ( 0 ) || ! info [ 0 ] -> IsBoolean ( ) ) return ThrowTypeError ( "Expected " "first" " argument to be " "a boolean" ) ; stmt -> safe_ints = ( info [ 0 ] . As < v8 :: Boolean > ( ) ) -> Value ( ) ; }
1076
1083
  info.GetReturnValue().Set(info.This());
1077
1084
  }
1078
- #line 271 "./src/objects/statement.lzz"
1085
+ #line 278 "./src/objects/statement.lzz"
1079
1086
  void Statement::JS_columns (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1080
- #line 271 "./src/objects/statement.lzz"
1087
+ #line 278 "./src/objects/statement.lzz"
1081
1088
  {
1082
1089
  Statement* stmt = node :: ObjectWrap :: Unwrap <Statement>(info.This());
1083
1090
  if (!stmt->returns_data) return ThrowTypeError("The columns() method is only for statements that return data");
@@ -1120,9 +1127,9 @@ void Statement::JS_columns (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1120
1127
 
1121
1128
  info.GetReturnValue().Set(columns);
1122
1129
  }
1123
- #line 314 "./src/objects/statement.lzz"
1130
+ #line 321 "./src/objects/statement.lzz"
1124
1131
  void Statement::JS_busy (v8::Local <v8 :: String> _, v8::PropertyCallbackInfo <v8 :: Value> const & info)
1125
- #line 314 "./src/objects/statement.lzz"
1132
+ #line 321 "./src/objects/statement.lzz"
1126
1133
  {
1127
1134
  Statement* stmt = node :: ObjectWrap :: Unwrap <Statement>(info.This());
1128
1135
  info.GetReturnValue().Set(stmt->alive && stmt->locked);
@@ -344,47 +344,47 @@ private:
344
344
  explicit Statement (Database * db, sqlite3_stmt * handle, sqlite3_uint64 id, bool returns_data);
345
345
  #line 85 "./src/objects/statement.lzz"
346
346
  static void JS_new (v8::FunctionCallbackInfo <v8 :: Value> const & info);
347
- #line 149 "./src/objects/statement.lzz"
347
+ #line 156 "./src/objects/statement.lzz"
348
348
  static void JS_run (v8::FunctionCallbackInfo <v8 :: Value> const & info);
349
- #line 172 "./src/objects/statement.lzz"
349
+ #line 179 "./src/objects/statement.lzz"
350
350
  static void JS_get (v8::FunctionCallbackInfo <v8 :: Value> const & info);
351
- #line 187 "./src/objects/statement.lzz"
351
+ #line 194 "./src/objects/statement.lzz"
352
352
  static void JS_all (v8::FunctionCallbackInfo <v8 :: Value> const & info);
353
- #line 208 "./src/objects/statement.lzz"
353
+ #line 215 "./src/objects/statement.lzz"
354
354
  static void JS_iterate (v8::FunctionCallbackInfo <v8 :: Value> const & info);
355
- #line 218 "./src/objects/statement.lzz"
355
+ #line 225 "./src/objects/statement.lzz"
356
356
  static void JS_bind (v8::FunctionCallbackInfo <v8 :: Value> const & info);
357
- #line 229 "./src/objects/statement.lzz"
357
+ #line 236 "./src/objects/statement.lzz"
358
358
  static void JS_pluck (v8::FunctionCallbackInfo <v8 :: Value> const & info);
359
- #line 240 "./src/objects/statement.lzz"
359
+ #line 247 "./src/objects/statement.lzz"
360
360
  static void JS_expand (v8::FunctionCallbackInfo <v8 :: Value> const & info);
361
- #line 251 "./src/objects/statement.lzz"
361
+ #line 258 "./src/objects/statement.lzz"
362
362
  static void JS_raw (v8::FunctionCallbackInfo <v8 :: Value> const & info);
363
- #line 262 "./src/objects/statement.lzz"
363
+ #line 269 "./src/objects/statement.lzz"
364
364
  static void JS_safeIntegers (v8::FunctionCallbackInfo <v8 :: Value> const & info);
365
- #line 271 "./src/objects/statement.lzz"
365
+ #line 278 "./src/objects/statement.lzz"
366
366
  static void JS_columns (v8::FunctionCallbackInfo <v8 :: Value> const & info);
367
- #line 314 "./src/objects/statement.lzz"
367
+ #line 321 "./src/objects/statement.lzz"
368
368
  static void JS_busy (v8::Local <v8 :: String> _, v8::PropertyCallbackInfo <v8 :: Value> const & info);
369
- #line 319 "./src/objects/statement.lzz"
369
+ #line 326 "./src/objects/statement.lzz"
370
370
  Database * const db;
371
- #line 320 "./src/objects/statement.lzz"
371
+ #line 327 "./src/objects/statement.lzz"
372
372
  sqlite3_stmt * const handle;
373
- #line 321 "./src/objects/statement.lzz"
373
+ #line 328 "./src/objects/statement.lzz"
374
374
  Extras * const extras;
375
- #line 322 "./src/objects/statement.lzz"
375
+ #line 329 "./src/objects/statement.lzz"
376
376
  bool alive;
377
- #line 323 "./src/objects/statement.lzz"
377
+ #line 330 "./src/objects/statement.lzz"
378
378
  bool locked;
379
- #line 324 "./src/objects/statement.lzz"
379
+ #line 331 "./src/objects/statement.lzz"
380
380
  bool bound;
381
- #line 325 "./src/objects/statement.lzz"
381
+ #line 332 "./src/objects/statement.lzz"
382
382
  bool has_bind_map;
383
- #line 326 "./src/objects/statement.lzz"
383
+ #line 333 "./src/objects/statement.lzz"
384
384
  bool safe_ints;
385
- #line 327 "./src/objects/statement.lzz"
385
+ #line 334 "./src/objects/statement.lzz"
386
386
  char mode;
387
- #line 328 "./src/objects/statement.lzz"
387
+ #line 335 "./src/objects/statement.lzz"
388
388
  bool const returns_data;
389
389
  };
390
390
  #line 1 "./src/objects/statement-iterator.lzz"