System.Data.SQLite

Check-in [ab8e950457]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Pickup the SQLite core library 3.22.0 docs from upstream.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: ab8e95045772a0fbb46939cfe58333c39388dbc2
User & Date: mistachkin 2018-01-22 20:04:26.878
Context
2018-01-22
22:28
Minor revisions to the test for ticket [0e48e80333]. check-in: 5017305c0d user: mistachkin tags: trunk
20:04
Pickup the SQLite core library 3.22.0 docs from upstream. check-in: ab8e950457 user: mistachkin tags: trunk
20:01
Update SQLite core library to the 3.22.0 release. check-in: 4089ea4f30 user: mistachkin tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to Doc/Extra/Core/lang_corefunc.html.
136
137
138
139
140
141
142

143
144
145
146
147
148
149
{"u":"lang_corefunc.html#round","x":"round(X)","s":0},
{"u":"lang_corefunc.html#round","x":"round(X,Y)","s":0},
{"u":"lang_corefunc.html#rtrim","x":"rtrim(X)","s":0},
{"u":"lang_corefunc.html#rtrim","x":"rtrim(X,Y)","s":0},
{"u":"lang_corefunc.html#soundex","x":"soundex(X)","s":0},
{"u":"lang_corefunc.html#sqlite_compileoption_get","x":"sqlite_compileoption_get(N)","s":0},
{"u":"lang_corefunc.html#sqlite_compileoption_used","x":"sqlite_compileoption_used(X)","s":0},

{"u":"lang_corefunc.html#sqlite_source_id","x":"sqlite_source_id()","s":0},
{"u":"lang_corefunc.html#sqlite_version","x":"sqlite_version()","s":0},
{"u":"lang_corefunc.html#substr","x":"substr(X,Y)","s":0},
{"u":"lang_corefunc.html#substr","x":"substr(X,Y,Z)","s":0},
{"u":"lang_corefunc.html#total_changes","x":"total_changes()","s":0},
{"u":"lang_corefunc.html#trim","x":"trim(X)","s":0},
{"u":"lang_corefunc.html#trim","x":"trim(X,Y)","s":0},







>







136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
{"u":"lang_corefunc.html#round","x":"round(X)","s":0},
{"u":"lang_corefunc.html#round","x":"round(X,Y)","s":0},
{"u":"lang_corefunc.html#rtrim","x":"rtrim(X)","s":0},
{"u":"lang_corefunc.html#rtrim","x":"rtrim(X,Y)","s":0},
{"u":"lang_corefunc.html#soundex","x":"soundex(X)","s":0},
{"u":"lang_corefunc.html#sqlite_compileoption_get","x":"sqlite_compileoption_get(N)","s":0},
{"u":"lang_corefunc.html#sqlite_compileoption_used","x":"sqlite_compileoption_used(X)","s":0},
{"u":"lang_corefunc.html#sqlite_offset","x":"sqlite_offset(X)","s":0},
{"u":"lang_corefunc.html#sqlite_source_id","x":"sqlite_source_id()","s":0},
{"u":"lang_corefunc.html#sqlite_version","x":"sqlite_version()","s":0},
{"u":"lang_corefunc.html#substr","x":"substr(X,Y)","s":0},
{"u":"lang_corefunc.html#substr","x":"substr(X,Y,Z)","s":0},
{"u":"lang_corefunc.html#total_changes","x":"total_changes()","s":0},
{"u":"lang_corefunc.html#trim","x":"trim(X)","s":0},
{"u":"lang_corefunc.html#trim","x":"trim(X,Y)","s":0},
460
461
462
463
464
465
466















467
468
469
470
471
472
473
  The sqlite_compileoption_used() SQL function is a wrapper around the
  <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> C/C++ function.
  When the argument X to sqlite_compileoption_used(X) is a string which
  is the name of a compile-time option, this routine returns true (1) or
  false (0) depending on whether or not that option was used during the
  build.
</dd>















<a name="sqlite_source_id"></a>
<dt><p><b>sqlite_source_id()</b></dt><dd><p>
  The sqlite_source_id() function returns a string that identifies the
  specific version of the source code that was used to build the SQLite
  library.  The string returned by sqlite_source_id() is
  the date and time that the source code was checked in followed by
  the SHA1 hash for that check-in.  This function is







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
  The sqlite_compileoption_used() SQL function is a wrapper around the
  <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> C/C++ function.
  When the argument X to sqlite_compileoption_used(X) is a string which
  is the name of a compile-time option, this routine returns true (1) or
  false (0) depending on whether or not that option was used during the
  build.
</dd>
<a name="sqlite_offset"></a>
<dt><p><b>sqlite_offset(<i>X</i>)</b></dt><dd><p>
  The sqlite_offset(X) function returns the byte offset in the database
  file for the beginning of the record from which value would be read.
  If X is not a column in an ordinary table, then sqlite_offset(X) returns
  NULL.  The value returned by sqlite_offset(X) might reference either the
  original table or an index, depending on the query.  If the value X would
  normally be extracted from an index, the sqlite_offset(X) returns the
  offset to the corresponding index record.  If the value X would be
  extracted from the original table, then sqlite_offset(X) returns the offset
  to the table record.

  <p>The sqlite_offset(X) SQL function is only available if SQLite is built
  using the <a href="compile.html#enable_offset_sql_func">-DSQLITE_ENABLE_OFFSET_SQL_FUNC</a> compile-time option.
</dd>
<a name="sqlite_source_id"></a>
<dt><p><b>sqlite_source_id()</b></dt><dd><p>
  The sqlite_source_id() function returns a string that identifies the
  specific version of the source code that was used to build the SQLite
  library.  The string returned by sqlite_source_id() is
  the date and time that the source code was checked in followed by
  the SHA1 hash for that check-in.  This function is
Changes to Doc/Extra/Core/pragma.html.
274
275
276
277
278
279
280

281
282
283
284
285
286
287
288
289
290
291
292

293
294
295
296

297
298
299
300
301
302
303
{"u":"pragma.html#pragma_encoding","x":"encoding","s":0},
{"u":"pragma.html#pragma_foreign_key_check","x":"foreign_key_check","s":0},
{"u":"pragma.html#pragma_foreign_key_list","x":"foreign_key_list","s":0},
{"u":"pragma.html#pragma_foreign_keys","x":"foreign_keys","s":0},
{"u":"pragma.html#pragma_freelist_count","x":"freelist_count","s":0},
{"u":"pragma.html#pragma_full_column_names","x":"full_column_names","s":3},
{"u":"pragma.html#pragma_fullfsync","x":"fullfsync","s":0},

{"u":"pragma.html#pragma_ignore_check_constraints","x":"ignore_check_constraints","s":0},
{"u":"pragma.html#pragma_incremental_vacuum","x":"incremental_vacuum","s":0},
{"u":"pragma.html#pragma_index_info","x":"index_info","s":0},
{"u":"pragma.html#pragma_index_list","x":"index_list","s":0},
{"u":"pragma.html#pragma_index_xinfo","x":"index_xinfo","s":0},
{"u":"pragma.html#pragma_integrity_check","x":"integrity_check","s":0},
{"u":"pragma.html#pragma_journal_mode","x":"journal_mode","s":0},
{"u":"pragma.html#pragma_journal_size_limit","x":"journal_size_limit","s":0},
{"u":"pragma.html#pragma_legacy_file_format","x":"legacy_file_format","s":0},
{"u":"pragma.html#pragma_locking_mode","x":"locking_mode","s":0},
{"u":"pragma.html#pragma_max_page_count","x":"max_page_count","s":0},
{"u":"pragma.html#pragma_mmap_size","x":"mmap_size","s":0},

{"u":"pragma.html#pragma_optimize","x":"optimize","s":0},
{"u":"pragma.html#pragma_page_count","x":"page_count","s":0},
{"u":"pragma.html#pragma_page_size","x":"page_size","s":0},
{"u":"pragma.html#pragma_parser_trace","x":"parser_trace","s":4},

{"u":"pragma.html#pragma_query_only","x":"query_only","s":0},
{"u":"pragma.html#pragma_quick_check","x":"quick_check","s":0},
{"u":"pragma.html#pragma_read_uncommitted","x":"read_uncommitted","s":0},
{"u":"pragma.html#pragma_recursive_triggers","x":"recursive_triggers","s":0},
{"u":"pragma.html#pragma_reverse_unordered_selects","x":"reverse_unordered_selects","s":0},
{"u":"pragma.html#pragma_schema_version","x":"schema_version","s":5},
{"u":"pragma.html#pragma_secure_delete","x":"secure_delete","s":0},







>












>




>







274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
{"u":"pragma.html#pragma_encoding","x":"encoding","s":0},
{"u":"pragma.html#pragma_foreign_key_check","x":"foreign_key_check","s":0},
{"u":"pragma.html#pragma_foreign_key_list","x":"foreign_key_list","s":0},
{"u":"pragma.html#pragma_foreign_keys","x":"foreign_keys","s":0},
{"u":"pragma.html#pragma_freelist_count","x":"freelist_count","s":0},
{"u":"pragma.html#pragma_full_column_names","x":"full_column_names","s":3},
{"u":"pragma.html#pragma_fullfsync","x":"fullfsync","s":0},
{"u":"pragma.html#pragma_function_list","x":"function_list","s":4},
{"u":"pragma.html#pragma_ignore_check_constraints","x":"ignore_check_constraints","s":0},
{"u":"pragma.html#pragma_incremental_vacuum","x":"incremental_vacuum","s":0},
{"u":"pragma.html#pragma_index_info","x":"index_info","s":0},
{"u":"pragma.html#pragma_index_list","x":"index_list","s":0},
{"u":"pragma.html#pragma_index_xinfo","x":"index_xinfo","s":0},
{"u":"pragma.html#pragma_integrity_check","x":"integrity_check","s":0},
{"u":"pragma.html#pragma_journal_mode","x":"journal_mode","s":0},
{"u":"pragma.html#pragma_journal_size_limit","x":"journal_size_limit","s":0},
{"u":"pragma.html#pragma_legacy_file_format","x":"legacy_file_format","s":0},
{"u":"pragma.html#pragma_locking_mode","x":"locking_mode","s":0},
{"u":"pragma.html#pragma_max_page_count","x":"max_page_count","s":0},
{"u":"pragma.html#pragma_mmap_size","x":"mmap_size","s":0},
{"u":"pragma.html#pragma_module_list","x":"module_list","s":4},
{"u":"pragma.html#pragma_optimize","x":"optimize","s":0},
{"u":"pragma.html#pragma_page_count","x":"page_count","s":0},
{"u":"pragma.html#pragma_page_size","x":"page_size","s":0},
{"u":"pragma.html#pragma_parser_trace","x":"parser_trace","s":4},
{"u":"pragma.html#pragma_pragma_list","x":"pragma_list","s":4},
{"u":"pragma.html#pragma_query_only","x":"query_only","s":0},
{"u":"pragma.html#pragma_quick_check","x":"quick_check","s":0},
{"u":"pragma.html#pragma_read_uncommitted","x":"read_uncommitted","s":0},
{"u":"pragma.html#pragma_recursive_triggers","x":"recursive_triggers","s":0},
{"u":"pragma.html#pragma_reverse_unordered_selects","x":"reverse_unordered_selects","s":0},
{"u":"pragma.html#pragma_schema_version","x":"schema_version","s":5},
{"u":"pragma.html#pragma_secure_delete","x":"secure_delete","s":0},
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
</script>

<p>Notes:
<ol>
<li>Pragmas whose names are <s>struck through</s>
are deprecated. Do not use them. They exist
for historical compatibility.
<li>These pragmas are used for debugging SQLite and
are only available when SQLite is compiled using <a href="compile.html#debug">SQLITE_DEBUG</a>.
<li>These pragmas are used for testing SQLite and are not recommended
for use in application programs.</ol></p>
<a name="pragma_application_id"></a>
<h _id=pragma_application_id style="display:none"> PRAGMA application_id</h><hr>
    <p><b>PRAGMA </b><i>schema.</i><b>application_id;
     <br>PRAGMA </b><i>schema.</i><b>application_id = </b><i>integer </i><b>;</b>
  







|
|







355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
</script>

<p>Notes:
<ol>
<li>Pragmas whose names are <s>struck through</s>
are deprecated. Do not use them. They exist
for historical compatibility.
<li>These pragmas are only available in builds using non-standard
compile-time options.
<li>These pragmas are used for testing SQLite and are not recommended
for use in application programs.</ol></p>
<a name="pragma_application_id"></a>
<h _id=pragma_application_id style="display:none"> PRAGMA application_id</h><hr>
    <p><b>PRAGMA </b><i>schema.</i><b>application_id;
     <br>PRAGMA </b><i>schema.</i><b>application_id = </b><i>integer </i><b>;</b>
  
854
855
856
857
858
859
860










861
862
863
864
865
866
867
       <br>PRAGMA fullfsync = </b><i>boolean</i><b>;</b></p>
    <p>Query or change the fullfsync flag. This flag
    determines whether or not the F_FULLFSYNC syncing method is used
    on systems that support it.  The default value of the fullfsync flag
    is off.  Only Mac OS X supports F_FULLFSYNC.</p>

    <p>See also <a href="pragma.html#pragma_checkpoint_fullfsync">checkpoint_fullfsync</a>.</p>










<a name="pragma_ignore_check_constraints"></a>
<h _id=pragma_ignore_check_constraints style="display:none"> PRAGMA ignore_check_constraints</h><hr>
    <p><b>PRAGMA ignore_check_constraints  = </b><i>boolean</i><b>;</b></p>

    <p>This pragma enables or disables the enforcement of CHECK constraints.
    The default setting is off, meaning that CHECK constraints are
    enforced by default.</p>







>
>
>
>
>
>
>
>
>
>







857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
       <br>PRAGMA fullfsync = </b><i>boolean</i><b>;</b></p>
    <p>Query or change the fullfsync flag. This flag
    determines whether or not the F_FULLFSYNC syncing method is used
    on systems that support it.  The default value of the fullfsync flag
    is off.  Only Mac OS X supports F_FULLFSYNC.</p>

    <p>See also <a href="pragma.html#pragma_checkpoint_fullfsync">checkpoint_fullfsync</a>.</p>
<a name="pragma_function_list"></a>
<h _id=pragma_function_list style="display:none"> PRAGMA function_list</h><hr>
    <p><b>PRAGMA function_list;</b>
    <p>This pragma returns a list of SQL functions
    known to the database connection.

     <p style='background-color: #f0e0ff;'>
    This pragma is only available if SQLite is built using the
    <a href="compile.html#introspection_pragmas">-DSQLITE_INTROSPECTION_PRAGMAS</a> compile-time option.
  
<a name="pragma_ignore_check_constraints"></a>
<h _id=pragma_ignore_check_constraints style="display:none"> PRAGMA ignore_check_constraints</h><hr>
    <p><b>PRAGMA ignore_check_constraints  = </b><i>boolean</i><b>;</b></p>

    <p>This pragma enables or disables the enforcement of CHECK constraints.
    The default setting is off, meaning that CHECK constraints are
    enforced by default.</p>
1198
1199
1200
1201
1202
1203
1204










1205
1206
1207
1208
1209
1210
1211

    <p>The size of the memory-mapped I/O region cannot be changed while
       the memory-mapped I/O region is in active use, to avoid unmapping
       memory out from under running SQL statements.  For this reason,
       the mmap_size pragma may be a no-op if the prior mmap_size is non-zero
       and there are other SQL statements running concurrently on the same
       <a href="c3ref/sqlite3.html">database connection</a>.</p>










<a name="pragma_optimize"></a>
<h _id=pragma_optimize style="display:none"> PRAGMA optimize</h><hr>
  <p><b>PRAGMA optimize;
       <br>PRAGMA optimize(</b><i>MASK</i><b>);
       <br>PRAGMA </b><i>schema</i><b>.optimize;
       <br>PRAGMA </b><i>schema</i><b>.optimize(</b><i>MASK</i><b>);</b></p>
  <p>Attempt to optimize the database.  All schemas are optimized in the 







>
>
>
>
>
>
>
>
>
>







1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234

    <p>The size of the memory-mapped I/O region cannot be changed while
       the memory-mapped I/O region is in active use, to avoid unmapping
       memory out from under running SQL statements.  For this reason,
       the mmap_size pragma may be a no-op if the prior mmap_size is non-zero
       and there are other SQL statements running concurrently on the same
       <a href="c3ref/sqlite3.html">database connection</a>.</p>
<a name="pragma_module_list"></a>
<h _id=pragma_module_list style="display:none"> PRAGMA module_list</h><hr>
    <p><b>PRAGMA module_list;</b>
    <p>This pragma returns a list of 
    <a href="vtab.html">virtual table</a> modules registered with the database connection.

     <p style='background-color: #f0e0ff;'>
    This pragma is only available if SQLite is built using the
    <a href="compile.html#introspection_pragmas">-DSQLITE_INTROSPECTION_PRAGMAS</a> compile-time option.
  
<a name="pragma_optimize"></a>
<h _id=pragma_optimize style="display:none"> PRAGMA optimize</h><hr>
  <p><b>PRAGMA optimize;
       <br>PRAGMA optimize(</b><i>MASK</i><b>);
       <br>PRAGMA </b><i>schema</i><b>.optimize;
       <br>PRAGMA </b><i>schema</i><b>.optimize(</b><i>MASK</i><b>);</b></p>
  <p>Attempt to optimize the database.  All schemas are optimized in the 
1314
1315
1316
1317
1318
1319
1320










1321
1322
1323
1324
1325
1326
1327

    
    <p style='background-color: #f0e0ff;'>
    This pragma is intended for use when debugging SQLite itself.  It
    is only available when the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time option
    is used.</p>
  










<a name="pragma_query_only"></a>
<h _id=pragma_query_only style="display:none"> PRAGMA query_only</h><hr>
    <p><b>PRAGMA query_only;
      <br>PRAGMA query_only = </b><i>boolean</i><b>;</b></p>

    <p>The query_only pragma prevents all changes to database files when
    enabled.</p>







>
>
>
>
>
>
>
>
>
>







1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360

    
    <p style='background-color: #f0e0ff;'>
    This pragma is intended for use when debugging SQLite itself.  It
    is only available when the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time option
    is used.</p>
  
<a name="pragma_pragma_list"></a>
<h _id=pragma_pragma_list style="display:none"> PRAGMA pragma_list</h><hr>
    <p><b>PRAGMA pragma_list;</b>
    <p>This pragma returns a list of PRAGMA commands
    known to the database connection.

     <p style='background-color: #f0e0ff;'>
    This pragma is only available if SQLite is built using the
    <a href="compile.html#introspection_pragmas">-DSQLITE_INTROSPECTION_PRAGMAS</a> compile-time option.
  
<a name="pragma_query_only"></a>
<h _id=pragma_query_only style="display:none"> PRAGMA query_only</h><hr>
    <p><b>PRAGMA query_only;
      <br>PRAGMA query_only = </b><i>boolean</i><b>;</b></p>

    <p>The query_only pragma prevents all changes to database files when
    enabled.</p>
Changes to Doc/Special/Core/vtab.html.
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287

</p></dd><dt><b>argc &gt; 1 <br> argv[0] = NULL</b>
</dt><dd><p>
A new row is inserted with column values taken from
argv[2] and following.  In a rowid virtual table, if argv[1] is an SQL NULL,
then a new unique rowid is generated automatically.  The argv[1] will be NULL
for a <a href="vtab.html#worid">WITHOUT ROWID virtual table</a>, in which case the implementation should
take the PRIMARY KEY value from the appropiate column in argv[2] and following.

</p></dd><dt><b>argc &gt; 1 <br> argv[0] &ne; NULL <br> argv[0] = argv[1]</b>
</dt><dd><p>
The row with rowid or PRIMARY KEY argv[0] is updated with new values 
in argv[2] and following parameters.

</p></dd><dt><b>argc &gt; 1 <br> argv[0] &ne; NULL <br> argv[0] &ne; argv[1]</b>







|







1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287

</p></dd><dt><b>argc &gt; 1 <br> argv[0] = NULL</b>
</dt><dd><p>
A new row is inserted with column values taken from
argv[2] and following.  In a rowid virtual table, if argv[1] is an SQL NULL,
then a new unique rowid is generated automatically.  The argv[1] will be NULL
for a <a href="vtab.html#worid">WITHOUT ROWID virtual table</a>, in which case the implementation should
take the PRIMARY KEY value from the appropriate column in argv[2] and following.

</p></dd><dt><b>argc &gt; 1 <br> argv[0] &ne; NULL <br> argv[0] = argv[1]</b>
</dt><dd><p>
The row with rowid or PRIMARY KEY argv[0] is updated with new values 
in argv[2] and following parameters.

</p></dd><dt><b>argc &gt; 1 <br> argv[0] &ne; NULL <br> argv[0] &ne; argv[1]</b>
1302
1303
1304
1305
1306
1307
1308



















1309
1310
1311
1312
1313
1314
1315
using functions such as <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> or <a href="c3ref/free.html">sqlite3_malloc()</a>.

</p><p>If the xUpdate method violates some constraint of the virtual table
(including, but not limited to, attempting to store a value of the wrong 
datatype, attempting to store a value that is too
large or too small, or attempting to change a read-only value) then the
xUpdate must fail with an appropriate <a href="rescode.html">error code</a>.




















</p><p>There might be one or more <a href="c3ref/vtab_cursor.html">sqlite3_vtab_cursor</a> objects open and in use 
on the virtual table instance and perhaps even on the row of the virtual
table when the xUpdate method is invoked.  The implementation of
xUpdate must be prepared for attempts to delete or modify rows of the table
out from other existing cursors.  If the virtual table cannot accommodate
such changes, the xUpdate method must return an <a href="rescode.html">error code</a>.







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
using functions such as <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> or <a href="c3ref/free.html">sqlite3_malloc()</a>.

</p><p>If the xUpdate method violates some constraint of the virtual table
(including, but not limited to, attempting to store a value of the wrong 
datatype, attempting to store a value that is too
large or too small, or attempting to change a read-only value) then the
xUpdate must fail with an appropriate <a href="rescode.html">error code</a>.

</p><p>If the xUpdate method is performing an UPDATE, then
<a href="c3ref/value_blob.html">sqlite3_value_nochange(X)</a> can be used to discover which columns
of the virtual table were actually modified by the UPDATE
statement.  The <a href="c3ref/value_blob.html">sqlite3_value_nochange(X)</a> interface returns
true for columns that do not change.
On every UPDATE, SQLite will first invoke
<a href="vtab.html#xcolumn">xColumn</a> separately for each unchanging column in the table to 
obtain the value for that column.  The <a href="vtab.html#xcolumn">xColumn</a> method can
check to see if the column is unchanged at the SQL level
by invoking <a href="c3ref/vtab_nochange.html">sqlite3_vtab_nochange()</a>.  If <a href="vtab.html#xcolumn">xColumn</a> sees that
the column is not being modified, it should return without setting 
a result using one of the <a href="c3ref/result_blob.html">sqlite3_result_xxxxx()</a>
interfaces.  Only in that case <a href="c3ref/value_blob.html">sqlite3_value_nochange()</a> will be
true within the xUpdate method.  If <a href="vtab.html#xcolumn">xColumn</a> does
invoke one or more <a href="c3ref/result_blob.html">sqlite3_result_xxxxx()</a>
interfaces, then SQLite understands that as a change in the value
of the column and the <a href="c3ref/value_blob.html">sqlite3_value_nochange()</a> call for that
column within xUpdate will return false.

</p><p>There might be one or more <a href="c3ref/vtab_cursor.html">sqlite3_vtab_cursor</a> objects open and in use 
on the virtual table instance and perhaps even on the row of the virtual
table when the xUpdate method is invoked.  The implementation of
xUpdate must be prepared for attempts to delete or modify rows of the table
out from other existing cursors.  If the virtual table cannot accommodate
such changes, the xUpdate method must return an <a href="rescode.html">error code</a>.
Changes to System.Data.SQLite/ISQLiteNativeModule.cs.
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
        /// No insert occurs.
        /// <![CDATA[</dd>]]><![CDATA[<dt>]]><![CDATA[<b>]]>argc &gt; 1 <![CDATA[<br>]]> argv[0] = NULL<![CDATA[</b>]]>
        /// <![CDATA[</dt>]]><![CDATA[<dd>]]>
        /// A new row is inserted with column values taken from
        /// argv[2] and following.  In a rowid virtual table, if argv[1] is an SQL NULL,
        /// then a new unique rowid is generated automatically.  The argv[1] will be NULL
        /// for a WITHOUT ROWID virtual table, in which case the implementation should
        /// take the PRIMARY KEY value from the appropiate column in argv[2] and following.
        /// <![CDATA[</dd>]]><![CDATA[<dt>]]><![CDATA[<b>]]>argc &gt; 1 <![CDATA[<br>]]> argv[0] &#8800; NULL <![CDATA[<br>]]> argv[0] = argv[1]<![CDATA[</b>]]>
        /// <![CDATA[</dt>]]><![CDATA[<dd>]]>
        /// The row with rowid or PRIMARY KEY argv[0] is updated with new values 
        /// in argv[2] and following parameters.
        /// <![CDATA[</dd>]]><![CDATA[<dt>]]><![CDATA[<b>]]>argc &gt; 1 <![CDATA[<br>]]> argv[0] &#8800; NULL <![CDATA[<br>]]> argv[0] &#8800; argv[1]<![CDATA[</b>]]>
        /// <![CDATA[</dt>]]><![CDATA[<dd>]]> The row with rowid or PRIMARY KEY argv[0] is updated with 
        /// the rowid or PRIMARY KEY in argv[1] 







|







1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
        /// No insert occurs.
        /// <![CDATA[</dd>]]><![CDATA[<dt>]]><![CDATA[<b>]]>argc &gt; 1 <![CDATA[<br>]]> argv[0] = NULL<![CDATA[</b>]]>
        /// <![CDATA[</dt>]]><![CDATA[<dd>]]>
        /// A new row is inserted with column values taken from
        /// argv[2] and following.  In a rowid virtual table, if argv[1] is an SQL NULL,
        /// then a new unique rowid is generated automatically.  The argv[1] will be NULL
        /// for a WITHOUT ROWID virtual table, in which case the implementation should
        /// take the PRIMARY KEY value from the appropriate column in argv[2] and following.
        /// <![CDATA[</dd>]]><![CDATA[<dt>]]><![CDATA[<b>]]>argc &gt; 1 <![CDATA[<br>]]> argv[0] &#8800; NULL <![CDATA[<br>]]> argv[0] = argv[1]<![CDATA[</b>]]>
        /// <![CDATA[</dt>]]><![CDATA[<dd>]]>
        /// The row with rowid or PRIMARY KEY argv[0] is updated with new values 
        /// in argv[2] and following parameters.
        /// <![CDATA[</dd>]]><![CDATA[<dt>]]><![CDATA[<b>]]>argc &gt; 1 <![CDATA[<br>]]> argv[0] &#8800; NULL <![CDATA[<br>]]> argv[0] &#8800; argv[1]<![CDATA[</b>]]>
        /// <![CDATA[</dt>]]><![CDATA[<dd>]]> The row with rowid or PRIMARY KEY argv[0] is updated with 
        /// the rowid or PRIMARY KEY in argv[1] 
1107
1108
1109
1110
1111
1112
1113




















1114
1115
1116
1117
1118
1119
1120
        /// <para>
        /// If the xUpdate method violates some constraint of the virtual table
        /// (including, but not limited to, attempting to store a value of the wrong 
        /// datatype, attempting to store a value that is too
        /// large or too small, or attempting to change a read-only value) then the
        /// xUpdate must fail with an appropriate error code.
        /// </para>




















        /// <para>
        /// There might be one or more sqlite3_vtab_cursor objects open and in use 
        /// on the virtual table instance and perhaps even on the row of the virtual
        /// table when the xUpdate method is invoked.  The implementation of
        /// xUpdate must be prepared for attempts to delete or modify rows of the table
        /// out from other existing cursors.  If the virtual table cannot accommodate
        /// such changes, the xUpdate method must return an error code.







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
        /// <para>
        /// If the xUpdate method violates some constraint of the virtual table
        /// (including, but not limited to, attempting to store a value of the wrong 
        /// datatype, attempting to store a value that is too
        /// large or too small, or attempting to change a read-only value) then the
        /// xUpdate must fail with an appropriate error code.
        /// </para>
        /// <para>
        /// If the xUpdate method is performing an UPDATE, then
        /// sqlite3_value_nochange(X) can be used to discover which columns
        /// of the virtual table were actually modified by the UPDATE
        /// statement.  The sqlite3_value_nochange(X) interface returns
        /// true for columns that do not change.
        /// On every UPDATE, SQLite will first invoke
        /// xColumn separately for each unchanging column in the table to 
        /// obtain the value for that column.  The xColumn method can
        /// check to see if the column is unchanged at the SQL level
        /// by invoking sqlite3_vtab_nochange().  If xColumn sees that
        /// the column is not being modified, it should return without setting 
        /// a result using one of the sqlite3_result_xxxxx()
        /// interfaces.  Only in that case sqlite3_value_nochange() will be
        /// true within the xUpdate method.  If xColumn does
        /// invoke one or more sqlite3_result_xxxxx()
        /// interfaces, then SQLite understands that as a change in the value
        /// of the column and the sqlite3_value_nochange() call for that
        /// column within xUpdate will return false.
        /// </para>
        /// <para>
        /// There might be one or more sqlite3_vtab_cursor objects open and in use 
        /// on the virtual table instance and perhaps even on the row of the virtual
        /// table when the xUpdate method is invoked.  The implementation of
        /// xUpdate must be prepared for attempts to delete or modify rows of the table
        /// out from other existing cursors.  If the virtual table cannot accommodate
        /// such changes, the xUpdate method must return an error code.